我想通过使用NodeJS从MongoDB中获得用户的朋友。
在MongoDB中,当我编写查询时,它可以工作。结果就是我想要的。
但是,我使用了相同的查询,但是在NodeJS中无法获得相同的结果。它返回一个空数组。 当我删除$ match部分时,它将返回一些记录。我认为$ match部分存在我无法捕获的问题。
查询和结果非常干净,如下所示:
MongoDB用户文档示例
function Animal(name) {
if (!(this instanceof Animal)) {
return new Animal(name);
}
this.name = name
}
Animal.prototype.eat = function() {
console.log(this.name + " is eating.")
}
// using new
let an1 = new Animal('bear'); an1.eat();
// not using new
let an2 = Animal('giraffe'); an2.eat();
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" }
}
}
])
NodeJS查询
{
"_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);
});