【问题标题】:Mongoose, limit each element of array resultMongoose,限制数组结果的每个元素
【发布时间】:2017-10-13 16:46:23
【问题描述】:

要查找具有 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)}});

【问题讨论】:

  • 所以每个 ID 只需要三个?
  • @AndrewLi 是的,每个人只有三个。
  • 我不确定这在一个查询中是否可行。我认为您可能需要一个一个地专门查询所有 ID。
  • 知道了。我已经用一堆查询做到了这一点,只是好奇是否可以将所有这些合并到一个查询中。

标签: javascript arrays node.js mongodb mongoose


【解决方案1】:

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

{
    _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'] 
}

【讨论】:

  • 谢谢米希尔。当我回到这个时,我会测试一下。
猜你喜欢
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多