[英]Mongoose DBRef implementation is not the same like in MongoDB documentation
我有一個小問題,也許是個小問題。 我正在嘗試對MongoDB數據庫使用mongoose.js的reference
。 讓我們看一下這個例子:
https://gist.github.com/hastebrot/1170907
當我運行此代碼時,我的數據庫中有類似的內容:
> db.stories.find()
{
"title" : "A man who cooked Nintendo",
"_creator" : ObjectId("52e7dc001bdedb703df29b8e"),
"_id" : ObjectId("52e7dc001bdedb703df29b8f"),
"fans" : [ ], "__v" : 0
}
> db.people.find()
{
"name" : "Aaron",
"age" : 100,
"_id" : ObjectId("52e7dc001bdedb703df29b8e"),
"stories" : [ ], "__v" : 0
}
如果我使用貓鼬插入數據並使用貓鼬讀取引用,一切都很好。 但是,當Java程序通過具有自己的mongoDB層的數據庫獲取db時,就會出現問題。
此Java程序在db中添加了類似的內容(這是另一個示例,不要在不匹配的字段上查找):
//other fields
"user": {
"$ref": "users",
"$id": {
"$oid": "52c6c497c08e6fcf37000001"
}
}
當我們轉到MongoDB的文檔( http://docs.mongodb.org/manual/reference/database-references/#dbrefs )時,我們可以看到引用屬性需要$ref
和$id
字段。
那么將mongoDB的DBRef類型錯誤實現為貓鼬是問題還是我做錯了嗎?
貓鼬中的參考是手動參考,不是dbref
(我將在后面討論其用法)。 從高層次_creator
,這是將人的ObjectId
作為值嵌入_creator
字段中。 然后,如果您希望“使用”這種關系,例如通過查找由“亞倫”這個人創建的所有故事,那么實際上會有兩個查詢:
_id
,即: db.people.findOne({"name" : "Aaron"})
_id
查找與該創建者相關的所有故事,即: db.stories.find({"creator" : ObjectId("52e7dc001bdedb703df29b8e")})
ORM (在這種情況下為貓鼬)正在為您抽象化,並允許您定義關系等,而您無需了解幕后情況。
當您嘗試使用ORM以外的本機驅動程序執行此操作時,就其實際上如何實現這些關系而言,您犯了一個根本性的錯誤。 它不使用數據庫引用,並且通常不鼓勵使用它們(請參閱docs中有關手動引用的第一條注釋),而是使用與上文所述類似的內容。
如果要模擬功能,則應執行類似的操作,並避免使用數據庫引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.