在mongoose分组给出多重纪录

我想通过下面的代码在mongoose聚合应用组

app.get('/api/get_conversation_all_carer/:carer_id',function(req,res){ //Sender = user and receiver = carer var data = []; var conversation = {status_code:200, data:data}; Conversation.find({'receiver_id': req.params.carer_id},{sender_id:1},{'group': 'sender_id'},function(err,result) { console.log(result); }); }); 

这给了我以下的输出

 [{ _id: 561f985439365e3c2aa9398a, sender_id: '55f000a2878075c416ff9879' }, { _id: 5620cfd0e4b0b1432a7331bb, sender_id: '55f000a2878075c416ff9879' }] 

这里为相同的sender_id为什么我得到两个单独的logging。
我只想要sender_id就好
[{sender_id:'55f000a2878075c416ff9879'}]

你想.aggregate()这是一个现代的版本,并没有JavaScript执行或翻译在本地代码更好的文件操作。 我认为你已经在文档中find了$group ,但没有意识到它绑定到.aggregate()而不是.find()方法:

 Conversation.aggregate( [ { "$match": { "receiver_id": req.params.carer_id }, { "$group": { "_id": "$sender_id" } } ], function(err,result) { console.log(result); } ); 

这将返回$group的“key” _id引用的字段的不同值的结果数组(即使只有一个),如下所示:

 [{_id: '55f000a2878075c416ff9879'}] 

您可以select使用$project来交换sender_id _id ,但这不是一个好习惯,而只是让接收逻辑接受“unique key”总是被命名为_id

尝试使用db.collection.group() :

 Conversation.collection.group( { key: {sender_id:1}, cond: {receiver_id: req.params.carer_id}, reduce: function ( curr, result ) { }, initial: { }, function(err, results){ console.log(result); } });