【问题标题】:Mongoose: Using $in operator with a limitMongoose:使用带有限制的 $in 运算符
【发布时间】:2015-05-05 07:58:03
【问题描述】:

我在 mongodb 中有一个 cmets 集合,我想获得基于数组的选择。我可以对要查询的 offerId 字段或 _id 的数组执行以下操作。

var offerIds = [123, 456, 789];
model.find({
    'offerId': { $in: offerIds }
}, function(err, docs){
     console.log(docs);
});

这可以正常工作,但是当我使用限制时,它会限制总数,而不是将限制应用于数组中的每个查询。当我使用.limit(5) 时,我期望发生的是返回 5 个 cmets,其中 offerId == 123,另外 5 个 cmets,其中 offerId == 456,另外 5 个 cmets,其中 offerId == 789。

相反,我得到 5 个 total,因此如果 offerId == 123 有 4 个 cmets,则 offerId == 456 只返回一个,使总数为 5。

我在文档中阅读了有关 $limit 的信息,但我不知道在哪里使用它或让它工作。 感谢您的帮助。

【问题讨论】:

  • 您需要三个查询。或者特别是 n 查询您要查询的 offerId 值的数量。您可能指的 [$limit ](docs.mongodb.org/manual/reference/operator/aggregation/limit) 是一个聚合管道阶段,它与 .limit() 作为聚合框架的查询修饰符所做的事情相同。可以通过聚合来做到这一点,但除了相对较小的结果集之外几乎完全不切实际。一个例子是here,但实际上,使用多个查询。

标签: node.js mongodb mongoose


【解决方案1】:

我建议你试试这个:

var offerIds = [123, 456, 789];
model.find({
    'offerId': { $in: offerIds }
}).limit(100).exec(function(err, docs){
   console.log(docs);
})

【讨论】:

  • 这是我最初尝试过的,但问题是它总共会返回 100,所以如果 offerId 123 有 8 个 cmets,我只想要其中的 5 个,如果 offerId 123 恰好有更多超过 100 cmets 则不会为其余的 offerId 返回任何内容。
猜你喜欢
  • 1970-01-01
  • 2022-08-10
  • 2021-12-09
  • 2012-05-21
  • 2021-08-19
  • 2021-09-17
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多