2017-02-27 79 views
-2

我有权访问MongoDB集合,但它们的_id条目是一个字符串,确切地说是一个url。在没有ObjectId的情况下获取MongoDB集合中的下一个项目

我想根据以前的_id检索集合中的下一个文档。我环顾四周,我发现可以使用ObjectID:Finding The Next Document in MongoDb

我的问题是数据库在_id中没有ObjectID,也没有可能用作ObjectID(f.e.时间戳)的备选项的字段。那么我将如何检索下一个文档?

编辑:新增集合示例

{ "_id": random.com, 
    "name": "Random", 
}, 
{ "_id": example.com, 
    "name": "Example", 
}, 
{ "_id": stack.com, 
    "name": "Stack", 
} 

如果我有_id“random.com”,我该如何检索下一个文件,在这种情况下,一个具有_id“example.com”?我正在使用pymongo。

+0

与你的问题很不清楚。但是如果你想从另一个集合中找出一个集合的字段,那么你既可以直接添加集合的子文档,也可以使用'DBRef'来给其他集合的引用。 –

+0

@SachinBahal我已经添加了一个我尝试完成的例子。 – Stanko

+0

为什么字段的类型是一个问题?仍然可以使用'db.coll.find({_ id:{“$ gt”:“example.com”}})。sort({_id:1})。limit(1)'这是如何得到下一个基于_id索引的文档。对于你的情况,索引是按字母顺序排列的,而你不会插入下一个。 – thanasisp

回答

1
cursor = db.coll.find({"_id": { "$gt": "the_url"}}).sort("_id").limit(1) 
for doc in cursor: 
    print(doc['_id']) 

请参阅sort了解如何定义订单。 索引是按字母顺序排列,我们得到_id的下一个值。

我们仍然可以查询下一个插入,即关于插入时间顺序,使用sort("natural")

cursor = db.coll.find({"_id": { $gt":the_url"}}).sort("natural").limit(1) 
+0

我有一个万维网记录和排序(“自然”)方法需要很长时间。 – Stanko

+0

这就是为什么我们不得不将URL存储为_id。 – thanasisp

+1

为_id使用实际值是一个好主意,只要它是一个独特的值。 –

相关问题