查询性能有点奇怪。。。我需要运行一个查询,该查询对文档进行总计数,还可以返回一个可以限制和偏移的结果集。
所以,我总共有57个文档,用户希望用10个文档抵消20个文档。
我可以想到两种方法,首先是查询所有57个文档(作为数组返回),然后使用array.slice返回他们想要的文档。第二种选择是运行2个查询,第一个使用mongo的本机计数方法,然后使用mongo的本机限制和跳过聚合器运行第二个查询。
你认为哪一个能更好地扩展?在一个查询中完成所有操作,还是运行两个单独的查询?
编辑:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
db.collection_name.aggregate([
{ '$match' : { } },
{ '$sort' : { '_id' : -1 } },
{ '$facet' : {
metadata: [ { $count: "total" } ],
data: [ { $skip: 1 }, { $limit: 10 },{ '$project' : {"_id":0} } ] // add projection here wish you re-shape the docs
} }
] )
而不是使用两个查询来查找总计数并跳过匹配的记录
$facet是最佳的优化方式
您可以在单个查询中使用aggregate()
,而不是使用两个单独的查询:
聚合“$facet”可以更快地获取总计数和跳过的数据
db.collection.aggregate([
//{$sort: {...}}
//{$match:{...}}
{$facet:{
"stage1" : [ {"$group": {_id:null, count:{$sum:1}}} ],
"stage2" : [ { "$skip": 0}, {"$limit": 2} ]
}},
{$unwind: "$stage1"},
//output projection
{$project:{
count: "$stage1.count",
data: "$stage2"
}}
]);
输出如下:-
[{
count: 50,
data: [
{...},
{...}
]
}]
还有,看看https://docs.mongodb.com/manual/reference/operator/aggregation/facet/
我建议您使用两个查询:
>
db。收集查找()。跳过(20)。限制(10)
这里我假设您可以使用按某个字段排序,所以不要忘记在该字段上添加索引。这个查询也会很快。
我认为您不应该查询所有项目,而应该执行“跳过”和“执行”,因为以后当您有大数据时,您将在数据传输和处理方面遇到问题。
根据我的理解,消费者阅读特定主题的消息,并且消费者客户机将定期提交偏移量。 因此,如果由于某种原因,使用者失败了一个特定的消息,该偏移量将不会被提交,然后您可以返回并重新处理该消息。 是否有任何东西跟踪您刚刚消耗的偏移和您随后提交的偏移?
我有一个Kafka的题目有1个分区。如果它有100条消息,偏移量将从0.99开始。 根据Kafka保留策略,在指定的时间之后,所有的消息都将被清除。 并且我正在发送100个新的消息到主题,一旦所有已经被清除(在保留期之后)。现在,消息的新偏移量从哪里开始呢?是从100还是从0?? 我想知道新的偏移是100-199还是0-99?
问题内容: 在我的数据库中,我有一个包含两列的表。第一列包含日期,第二列是计数变量。我想知道是否有可能根据日期和计数来计算每个工作日的平均计数。在下面的一个小例子中: 桌子: 输出: 问题答案: 您可以对表达式进行一系列调用以提取当天的名称: 编辑: 鉴于编辑后的帖子中已更新了预期的输出,因此操作起来容易得多-只需按:分组即可:
在执行手工抵销管理时,我遇到了以下问题:(使用0.9) 为了手动管理偏移量,对于每个消耗的记录,我检索记录的当前偏移量并提交新的偏移量(currentOffset+1,因为偏移量重置策略是“最新的”)。 当创建新的使用者组时,它没有显式的偏移量(偏移量是“未知”的),因此,如果它在停止之前没有使用来自所有现有分区的消息,那么它将只为部分分区(使用者从中获取消息的分区)提交偏移量,而其余分区的偏移量
我正在查找与url匹配但返回自定义对象的记录。 我有这个模型。。 我想查询该模型并匹配url,但返回如下响应: 我需要能够通过将记录的ip与过程中的变量进行比较,动态计算反应的ip是否为真。 一次尝试是 但我似乎无法集中IP并查看我的变量IP是否在该数组中。 谢谢你的帮助。我第一次问!
问题内容: 我试图找出如何用Mongoose做特定的查询。我在mongodb中有这样的东西: 我想获取实际日期和modificationDate之间的差异大于5天的所有对象。 问题答案: 计算5天的截止时间,然后使用运算符和计算出的截止值执行: