我有这两个模式,水果模式和用户模式。我将它们分成两个不同的集合,但是一个水果模式可以引用一个用户。
const FruitSchema = new Schema({
title: {
type: String
},
buyer: {
_id: {
type: Schema.Types.ObjectId,
default: null
}
}
})
const UserSchema = new Schema({
name: {
type: String
},
age: {
type: Number
},
gender: {
type: String
}
})如何查询所有包含用户信息的水果?我能想到的是找到所有的水果,获取buyer._id,然后找到每个用户,将它们映射回水果数组,听起来非常繁琐和复杂。如果是mysql,我就加入。
发布于 2018-01-13 12:33:52
您需要使用$lookup来连接购买者id和用户id,对于所有匹配的集合,它将以嵌入文档的形式返回用户信息。
db.fruitz.aggregate(
[
{
$lookup : {
from : "userz",
localField : "buyer_id",
foreignField: "_id",
as : "buyerInfo"
}
}
]
)水果收藏
> db.fruitz.find().pretty()
{ "_id" : 2, "title" : "apple", "buyer_id" : 1 }
{ "_id" : 1, "title" : "banana", "buyer_id" : 2 }users集合
> db.userz.find().pretty()
{ "_id" : 1, "name" : "abc", "age" : 20, "gender" : "M" }
> $lookup聚合
> db.fruitz.aggregate( [ { $lookup : { from : "userz", localField : "buyer_id", foreignField: "_id", as : "buyerInfo" } } ] ).pretty()输出
{
"_id" : 2,
"title" : "apple",
"buyer_id" : 1,
"buyerInfo" : [
{
"_id" : 1,
"name" : "abc",
"age" : 20,
"gender" : "M"
}
]
}
{ "_id" : 1, "title" : "banana", "buyer_id" : 2, "buyerInfo" : [ ] }
> https://stackoverflow.com/questions/48236888
复制相似问题