有没有办法更改MongoDB集合引用? 随着变化,我的意思是参考中的值。 我不能只创建一个直接链接,因为数据库正在使用中。 我的结构看起来像这样
{
"_id" : ObjectId("4e7c6b47e4b0dea06288ad21"),
"license" : "ABC123",
"model" : "911",
"make" : "Porsche",
"owner" : {
"$ref" : "users",
"$id" : "Test User"
}
}
我想更改ID
{ "$ref" : "users", "$id" : "NEW USER"}
答案 0 :(得分:3)
当然可以,但你不能用直接的套装来做到这一点:
> db.test.save({a:{$ref:"users", $id:"Test User"}})
> db.test.find()
{ "_id" : ObjectId("4f1e85489d086ee4511551b6"), "a" : DBRef("users", "Test User") }
> db.test.update({}, {$set:{'a.$id':"NEW USER"}})
> db.test.find()
{ "_id" : ObjectId("4f1e85489d086ee4511551b6"), "a" : { "$id" : "NEW USER", "$ref" : "users" } }
正如您所看到的,这会破坏引用,因为DBRef规范要求$ ref和$ id字段的顺序为$ ref。
你可以这样更新:
> db.test.update({}, {$set:{a:{$ref:"users", $id:"NEW USER"}}})
> db.test.find()
{ "_id" : ObjectId("4f1e858b9d086ee4511551b7"), "a" : DBRef("users", "NEW USER") }
如果你在shell中,或者只使用“new DBRef(..)”。
答案 1 :(得分:0)
就我个人而言,我已经开始完全避免使用DBRef,因为它增加了许多不必要的开销,因为在我的情况下," user"字段在同一个集合中,使得DBRef的第一部分减少。
所以我会迁移到一个新领域(让我们说" ownerId")并直接将ObjectId存储在那里。显然,您可能需要对用户对象进行一些手动检索,但这取决于您的应用程序框架。