如何使用MongoDB查询在NodeJS中进行聚合

时间:2019-04-14 01:19:28

标签: javascript node.js mongodb mongoose aggregation-framework

我想通过使用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);

});

0 个答案:

没有答案