我正在尝试通过以下代码
在mongoose中按聚合应用groupapp.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,为什么我得到两个单独的记录
我想发送者_id就像
一样
[{sender_id:'55f000a2878075c416ff9879'}]
答案 0 :(得分:2)
您希望.aggregate()
是一个现代版本,并且可以在没有JavaScript执行或翻译的情况下更好地在本机代码中进行文档操作。我认为您已经在文档中找到了$group
,但没有意识到它与.aggregate()
相关联,而不是.find()
方法:
Conversation.aggregate(
[
{ "$match": { "receiver_id": req.params.carer_id },
{ "$group": { "_id": "$sender_id" } }
],
function(err,result) {
console.log(result);
}
);
这将为_id
的“密钥”$group
中引用的字段的不同值返回一个结果数组,(即使只有一个),如下所示:
[{_id: '55f000a2878075c416ff9879'}]
您可以选择使用$project
与_id
交换sender_id
,但这不是一个好习惯,而是让您的接收逻辑接受“唯一键”始终改为命名为_id
。
答案 1 :(得分:0)
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);
}
});