2

我试图通过聚集在猫鼬通过下面的代码集团在猫鼬给

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为什么我收到申请组的多个记录两个单独的记录。
我只想SENDER_ID像
[{SENDER_ID: '55f000a2878075c416ff9879'}]

+0

我通常将'group'看作'$ group'。你确定“group”是正确的吗? – Kip

+0

是的。其实我没有收到任何语法错误 –

回答

2

你想.aggregate()这是一个现代版的和做更好的文档操作本机代码,而无需JavaScript执行或翻译。我supspect你已经发现$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可选的sender_id交换_id,但它不是一个很好的习惯进入,并且相当只是让你的接收逻辑接受“唯一键”始终命名为_id

0

尝试使用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); 
    } 
});