我已经用概述和ID对集合进行了排序。
$sort{{ overview: 1,_id:1 }}
这就产生了这样一个集合。
当我筛选集合以仅显示“主题13”之后的文档时,它按预期工作。
$match{{
_id:{$gt:ObjectId('605db89d208db95eb4878556')}
}}
然而,当我尝试使用下面的查询查看“subject 13”(即“subject 6”)之前的文档时,它并没有像我预期的那样工作。
$match{{
_id:{$lt:ObjectId('605db89d208db95eb4878556')}
}}
我得到的不是结果中的“主题6”,而是以下内容。
我怀疑这是因为mongodb总是在排序之前过滤文档,而不管聚合管道中的顺序如何。
请建议我在mongodb中的特定“_id”之前获取文档的方法。
我在集合中有600个文档,这是一个示例数据集。下面是我的完整聚合查询。
[
{
'$sort': {
'overview': 1,
'_id': 1
}
}, {
'$match': {
'_id': {
'$lt': new ObjectId('605db89d208db95eb4878556')
}
}
}
]
MongoDB优化了查询性能,在您的案例中,将排序移动到末尾,因为您已经将$排序
后跟$匹配
https://docs.mongodb.com/manual/core/aggregation-pipeline-optimization/#sort-匹配序列优化
[
{ '$sort': { 'overview': 1, '_id': 1 } },
{ '$match': { '_id': { '$lt': new ObjectId('605db89d208db95eb4878556') } }
]
在优化阶段,优化器将序列转换为以下内容:
[
{ '$match': { '_id': { '$lt': new ObjectId('605db89d208db95eb4878556') } },
{ '$sort': { 'overview': 1, '_id': 1 } }
]
我们可以看到,在执行排序之后,第一阶段是匹配查询。
{
"stages" : [
{
"$cursor" : {
"query" : {
"_id" : {
"$lt" : ObjectId("605db89d208db95eb4878556")
}
},
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "video.data3",
"indexFilterSet" : false,
"parsedQuery" : {
"_id" : {
"$lt" : ObjectId("605db89d208db95eb4878556")
}
},
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"_id" : 1
},
"indexName" : "_id_",
"isMultiKey" : false,
"multiKeyPaths" : {
"_id" : []
},
"isUnique" : true,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"_id" : [
"[ObjectId('000000000000000000000000'), ObjectId('605db89d208db95eb4878556'))"
]
}
}
},
"rejectedPlans" : []
}
}
},
{
"$sort" : {
"sortKey" : {
"overview" : 1,
"_id" : 1
}
}
}
],
"ok" : 1.0
}
我想从ElasticSearch的结果文档中排除一个字段。我浏览了ElasticSearch.org的这个文档http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-fields.html但当我尝试时,这不起作用。我在SO上看到了同样的问题。有没有办法在Elasticsearch查询中
我是新的MongoDB,并试图从数据库检索单个文档的大小。 数据库名为“”集合名为“” 我试过: 我也尝试过: 但它只返回。如何获取文档的大小?非常感谢。
如何从MongoDB中的集合中随机获取单个文档。 我如何修复代码。 我收到错误:未定义不是函数 --------------------------------------好的。我修复了----------------------------
在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?
我有一个索引(名称:“index1”)指向ElasticSearch中的多个文档。 文档的格式(json)是- 下面是映射- 我在ES查询中哪里做错了?
问题内容: 从最近6小时开始搜寻,但没有任何解决方法。请帮我。Elasticsearch ID为:2、4、7、8、11、15、15、16,.... 我的当前文档ID为11,然后如何获取下一个ID为15,上一个ID为8。 谢谢 问题答案: 您可以运行两个查询,一个查询下一个ID,一个查询前一个ID。 下一个ID的查询是: 而先前ID的查询为:
我需要更新Mongo DB中另一个文档内的数组中的一个文档
问题内容: 我正在尝试使用websocket将数据从node.js / MongoDB实例“流式传输”到客户端。一切都很好。 但是,如何确定结果中的最后一个文档?我正在使用node-mongodb-native从node.js连接到MongoDB。 一个简化的例子: 问题答案: 由于mongodb objectId包含创建日期,因此您可以按ID,降序排序,然后使用limit(1): 注意:我一点都