在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); } });