Mongoose,限制数组结果的每个元素

时间:2017-05-15 01:21:29

标签: javascript arrays node.js mongodb mongoose

要查找包含ID数组的对象,我们可以这样做:

var idsArray = ['id1', 'id2', 'id3'];
 SomeObject.find({'chatroomId': { $in: idsArray}}).exec();
  .then(function(someObjects) {
    console.log(someObjects);
})

是否可以限制数组中每个成员的结果? 不是像这样的整体结果:

SomeObject.find({'chatroomId': { $in: idsArray}}).limit(3)

但是对于每个元素。也许是这样的:

SomeObject.find({'chatroomId': { $in: idsArray.forEach.limit(3)}});

1 个答案:

答案 0 :(得分:0)

考虑到您的文档结构如下:

{
    _id : ObjectId("591931855d0aad80c996eab2)",
    chatName : 'SchoolChat',
    chatrootId : ['id1', 'id2','id3','id4','id5']
}

您可以使用以下查询来获取所需内容:

db.collection_name.aggregate([ 
    { $unwind : '$chatrootId' },
    { $limit : 3}, 
    { $group : {
        _id : '$_id',
        chatName : { $first : '$chatName' },
        chatroomId : { $push : '$chatrootId' },
        } 
    }   
]);

它会给你:

{ 
    "_id" : ObjectId("591931855d0aad80c996eab2"), 
    "chatName" : "SchoolChat", 
    "chatroomId" : [ 'id1', 'id2', 'id3'] 
}