如何获取所选文档在集合中的位置[MongoDB]

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

如何获取所选文档在Mongo集合中的位置(索引)?

本文件:db.myCollection.find({"id":12345})有索引3myCollection

myCollection:
    id: 12340, name: 'G'
    id: 12343, name: 'V'
    id: 12345, name: 'A'
    id: 12348, name: 'N'
提问于
用户回答回答于

如果你的要求是查找文档的位置而不考虑任何顺序,这是不可能的,因为MongoDb不会按特定顺序存储文档。但是,如果你想知道基于某个字段的索引_id,则可以使用此方法。

如果你严格遵循所在_id领域的自动增量。你可以计算所有文件的价值低于这个_id,比如说n,那么n + 1就是基于文档的索引_id

n = db.myCollection.find({"id": { "$lt" : 12345}}).count() ;

如果从集合中删除文档,这也是有效的。

用户回答回答于

据我所知,没有单独的命令来完成这个任务,这在一般情况下是不可能的(参见Derick的答案)。然而,使用count()对于在有序id值字段上完成的查询,似乎有效。警告:这假设存在一个可靠的有序字段,在并发编写器的情况下很难做到这一点。在这个例子中_id但是,这只适用于单个编写例。:

MongoDB shell version: 2.0.1
connecting to: test
> use so_test
switched to db so_test
> db.example.insert({name: 'A'})
> db.example.insert({name: 'B'})
> db.example.insert({name: 'C'})
> db.example.insert({name: 'D'})
> db.example.insert({name: 'E'})
> db.example.insert({name: 'F'})
> db.example.find()
{ "_id" : ObjectId("4fc5f040fb359c680edf1a7b"), "name" : "A" }
{ "_id" : ObjectId("4fc5f046fb359c680edf1a7c"), "name" : "B" }
{ "_id" : ObjectId("4fc5f04afb359c680edf1a7d"), "name" : "C" }
{ "_id" : ObjectId("4fc5f04dfb359c680edf1a7e"), "name" : "D" }
{ "_id" : ObjectId("4fc5f050fb359c680edf1a7f"), "name" : "E" }
{ "_id" : ObjectId("4fc5f053fb359c680edf1a80"), "name" : "F" }
> db.example.find({_id: ObjectId("4fc5f050fb359c680edf1a7f")})
{ "_id" : ObjectId("4fc5f050fb359c680edf1a7f"), "name" : "E" }
> db.example.find({_id: {$lte: ObjectId("4fc5f050fb359c680edf1a7f")}}).count()
5
> 

扫码关注云+社区