gpt4 book ai didi

javascript - Mongoose 无需查询即可获取相关数据

转载 作者:行者123 更新时间:2023-11-30 14:50:19 25 4
gpt4 key购买 nike

我有这两个模式,水果模式和用户模式。我将它们分成 2 个不同的集合,但水果模式可以引用用户。

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,我就加入。

最佳答案

您需要使用$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 }

用户集合

> db.userz.find().pretty()
{ "_id" : 1, "name" : "abc", "age" : 20, "gender" : "M" }
>

$查找汇总

> 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" : [ ] }
>

关于javascript - Mongoose 无需查询即可获取相关数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com