Monk / Mongodb 在另一个查找的回调中执行查找
Monk / Mongodb performing find inside callback of another find
我有以下文档结构来记录用户的好友列表:
{
"_id" : ObjectId("5df4d0ac6480078812e7b2ff"),
"name" : "Alice"
"friends" : [ "Bob", "John" ]
}
当收到用户请求时,比如 "Alice"
,我想检索 Alice 的朋友以及他们的 _id
字段,返回朋友姓名数组的响应和他们的_id
,例如
[{"name": "Bob", "_id": "abcdef"}, {"name": "John", "_id": "ghjikl"}
如何在 Monk 中执行此操作?
我的想法是对用户使用 collection.find()
来检索好友列表,然后循环执行另一个 find()
来获取他们的 _id
。但这不起作用,因为我无法从嵌套 find()
回调函数外部更新变量。
这个 aggregation
会给你接近你想要的东西:
db.users.aggregate([
{
"$match": {
"name": "Alice"
}
},
{
"$lookup": {
"from": "users",
"as": "friends",
"localField": "friends",
"foreignField": "name"
}
},
{
"$project": {
"_id": 0,
"friends._id": 1,
"friends.name": 1,
}
}
])
输出:
[
{
"friends": [
{
"_id": "abcdef",
"name": "Bob"
},
{
"_id": "ghjikl",
"name": "John"
}
]
}
]
我有以下文档结构来记录用户的好友列表:
{
"_id" : ObjectId("5df4d0ac6480078812e7b2ff"),
"name" : "Alice"
"friends" : [ "Bob", "John" ]
}
当收到用户请求时,比如 "Alice"
,我想检索 Alice 的朋友以及他们的 _id
字段,返回朋友姓名数组的响应和他们的_id
,例如
[{"name": "Bob", "_id": "abcdef"}, {"name": "John", "_id": "ghjikl"}
如何在 Monk 中执行此操作?
我的想法是对用户使用 collection.find()
来检索好友列表,然后循环执行另一个 find()
来获取他们的 _id
。但这不起作用,因为我无法从嵌套 find()
回调函数外部更新变量。
这个 aggregation
会给你接近你想要的东西:
db.users.aggregate([
{
"$match": {
"name": "Alice"
}
},
{
"$lookup": {
"from": "users",
"as": "friends",
"localField": "friends",
"foreignField": "name"
}
},
{
"$project": {
"_id": 0,
"friends._id": 1,
"friends.name": 1,
}
}
])
输出:
[
{
"friends": [
{
"_id": "abcdef",
"name": "Bob"
},
{
"_id": "ghjikl",
"name": "John"
}
]
}
]