gpt4 book ai didi

mongodb - 使用字符串或 ObjectId 构造 DBRef

转载 作者:行者123 更新时间:2023-12-04 05:02:45 26 4
gpt4 key购买 nike

我注意到可以使用字符串或对象 ID 来构造 DBRef在 mongodb 中。例如

db.persons.insert({name: 'alice'})
db.persons.find()
// { "_id" : ObjectId("5165419064fada69cef33ea2"), "name" : "alice" }
db.persons.insert({name: 'bob', sister: new DBRef('persons', '5165419064fada69cef33ea2')}) // use a string
db.persons.find()
// { "_id" : ObjectId("5165419064fada69cef33ea2"), "name" : "alice" }
// { "_id" : ObjectId("516541c064fada69cef33ea3"), "name" : "bob", "sister" : { "$ref" : "persons", "$id" : "5165419064fada69cef33ea2" } }
db.persons.insert({name: 'cavin', sister: new DBRef('persons', new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId
db.persons.find()
// { "_id" : ObjectId("5165419064fada69cef33ea2"), "name" : "alice" }
// { "_id" : ObjectId("516541c064fada69cef33ea3"), "name" : "bob", "sister" : { "$ref" : "persons", "$id" : "5165419064fada69cef33ea2" } }
// { "_id" : ObjectId("516541e464fada69cef33ea4"), "name" : "cavin", "sister" : { "$ref" : "persons", "$id" : ObjectId("5165419064fada69cef33ea2") } }

谁能告诉我有什么区别以及哪种方式是首选?

最佳答案

唯一的区别是一个实际上是 ObjectId另一个是看起来是 ObjectId 的字符串表示.

DBRef 作为 ObjectId:

db.persons.insert({name: 'cavin', 
sister: new DBRef('persons',
new ObjectId('5165419064fada69cef33ea2'))}) // use an ObjectId

DBRef 作为字符串:
db.persons.insert({name: 'bob', 
sister: new DBRef('persons',
'5165419064fada69cef33ea2')}) // use a string

在您包含的示例中, ObjectId格式可能会导致更有效的存储,因为它是一个 12 字节的值,而不是字符串表示所需的 24 字节。如果您想使用 DBRef s,我会使用 ObjectId如果引用的集合正在使用 ObjectId s 为 _id .

您不需要使用 ObjectIdDBRef .它可以是表示相关集合/数据库的键 ( _id ) 的任何值。

documentation建议,除非您有令人信服的理由使用 DBRef ,请改用手动引用。

关于mongodb - 使用字符串或 ObjectId 构造 DBRef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15923788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com