如何在MongoDB中为嵌入文档创建唯一ID?
所以我需要从我的集合中的项目中唯一引用特定的子文档。例如:如何在MongoDB中为嵌入文档创建唯一ID?
User = {
'name': 'jim',
'documents: [
{'id': 0001, 'title': "My document"},
{'id': 0002, 'title': "My second document!"},
]
}
所以我需要能够自动创建新文档的ID,最好不要在应用级(因为会出现在实际的开发场景的比赛条件)。
有没有办法使用mongo的自动生成的ObjectId(在集合级别的_id字段中使用)或类似的东西?
是的,使用mongo的ObjectId是要走的路。唯一的问题是:您必须自己在应用程序代码中生成它们。它们意味着全球独一无二,不同的工作人员不会生成两个相同的ObjectId,因此在这种意义上没有竞争条件。
所有官方驱动程序都应提供生成ObjectId的方法。以下是Ruby中的方式:
oid = BSON::ObjectId.new
您是否知道如何使用mongo CLI执行此操作? – 2017-01-20 18:54:20
@PiniCheyni像这样:'new ObjectId()' – Clouren 2017-02-17 14:02:52
所有驱动程序都具有生成ObjectId的功能。
在外壳里,你只是做new ObjectId()
:
> db.test.insert({x:new ObjectId()});
> db.test.find();
{ "_id" : ObjectId("4f88592a06c05e4de90d0bc1"), "x" : ObjectId("4f88592a06c05e4de90d0bc0") }
在Java它new ObjectId()
为好。查看驱动程序的API文档以查看特定的语法。
流星,在服务器上,使用方法:
new Meteor.Collection.ObjectID(hexString);
link should be http://docs.meteor.com/#/full/mongo_object_id – 2015-05-05 09:16:35
下面是如何做到这一点Clojure中,假设使用congomongo的:
(import org.bson.types.ObjectId)
(str (ObjectId.)) ; => "12345xxxxx"
随着mongoengine像这样在嵌入式文档中创建ObjectId:
from bson.objectid import ObjectId
class Address(EmbeddedDocument):
_id = ObjectIdField(required=True, default=lambda: ObjectId())
street = StringField()
'default = ObjectId' should also work – 2017-07-10 10:24:45
如果您使用Guid,则不会有 – 2012-04-13 16:40:42