mongodb聚合两个集合并添加新字段
Posted
技术标签:
【中文标题】mongodb聚合两个集合并添加新字段【英文标题】:mongodb aggregate two collections and add new fields 【发布时间】:2021-06-26 00:02:08 【问题描述】:我有两个收藏:authors 和 books
作者示例:
_id: "605f6746c114544ee04228bd"
firstName: "firstName",
lastName: "lastName",
书籍示例:
_id: "605f6746c114544ee04228bd"
title: "title",
pages: 350,
我想获取作者名字和姓氏的书籍列表。
这是我当前的代码:
let books;
books = await Book.find();
books.forEach(async (book, i) =>
const author = await Author.findOne(
_id: book.authorId ,
firstName: 1, lastName: 1, _id: 0
);
books[i].authorFirstName = author.firstName;
books[i].authorLastName = author.lastName;
);
这不是一个好习惯,因为对于每本书,我都会对 mongodb 数据库执行另一个请求! 有更好的解决方案吗?
【问题讨论】:
使用mongoose.populate
,就是将两个模型链接在一起的方式
谢谢@Mastermind 它有效
【参考方案1】:
使用猫鼬填充的简洁代码和更高性能
import Book from "../models/Book";
import Author from "../models/Author";
let books = await Book.find().populate(
path: "authorId",
model: Author,
select: firstName: 1, lastName: 1, _id: 0 ,
);
【讨论】:
【参考方案2】:猫鼬版加入两个有关系的模型
books = await Book.find().populate( path:"authorId", select:firstName:1, lastName:1)
使用聚合
let books = await Book.aggregation([
$lookup:
from:"collection_of_author",
localField: "authorId",
foreignField: "_id",
as: "author"
,
$unwind:
path:"authorId",
preserveNullAndEmptyArrays:true
])
【讨论】:
以上是关于mongodb聚合两个集合并添加新字段的主要内容,如果未能解决你的问题,请参考以下文章