javascript - 如何在 NodeJS 中使用 MongoDB 查询进行聚合
问题描述
我想通过使用 NodeJS 从 MongoDB 获取用户的朋友。
在 MongoDB 中,当我编写查询时,它可以工作。结果就是我想要的。
但是,我使用了相同的查询,但在 NodeJS 中无法获得相同的结果。它返回一个空数组。 当我删除 $match 部分时,它会返回一些记录。我认为 $match 部分有一些我无法解决的问题。
查询和结果非常干净,如下:
MongoDB 用户文档示例
{
"_id" : ObjectId("5cb14fd7db537905c89e0a72"),
"email" : "canmustu@gmail.com",
"username" : "canmustuu",
"inbox" : [],
"friends" : [
{
"user" : {
"id" : ObjectId("5cb18680aa024b2d441f93cc")
}
},
{
"user" : {
"id" : ObjectId("5cb18680aa024b2d441f93cd")
}
},
{
"user" : {
"id" : ObjectId("5cb18680aa024b2d441f93ce")
}
}
],
"friend_requests" : [],
"created_at" : ISODate("2019-04-13T02:56:23.132Z")
}
MongoDB 查询
db.getCollection('users').aggregate([
{
$match: { _id: ObjectId("5cb14fd7db537905c89e0a72") }
},
{
$group: {
_id: null,
friends: { $push: "$friends.user.id" }
}
}
])
MongoDB 结果
{
"_id" : null,
"friends" : [
[
ObjectId("5cb18680aa024b2d441f93cc"),
ObjectId("5cb18680aa024b2d441f93cd"),
ObjectId("5cb18680aa024b2d441f93ce")
]
]
}
NodeJS 查询
let query = [
{
$match: { _id: user_id } // user_id = "5cb14fd7db537905c89e0a72"
},
{
$group: {
_id: null,
friends: { $push: "$friends.user.id" }
}
}
];
User.aggregate(query, (error, result) => {
console.log(result);
});
节点JS结果
[]
解决方案
推荐阅读
- javascript - 如何从 vuejs 的下拉列表中获取选定的值?
- apache-spark - 火花/纱线:FileNotFoundException
- python - 使用 Google Cloud DataFlow python sdk 读取一组 xml 文件
- javascript - 在 ES6 中使用默认值和扩展语法
- reactjs - 通知日期字段示例?更多文档
- symfony - 从默认 Symfony 3 翻译文件翻译教义查询
- opengl - 如何使用 glDebugMessageControl
- javascript - 如何将数据推送到位置为 [i] 的数组?
- botframework - 聊天机器人在 Microsoft Teams 人员列表中不可见
- android - Xamarin.Forms 带有软键盘或警报的 Android 沉浸式模式