MongoDB - DBRef

Cai*_*aio 0 find mongodb dbref

我在DBRef上遇到了一些麻烦,看看这个案例:

db.fruit.save ({"_id" : "1" , "name" : "apple"});
db.fruit.save ({"_id" : "2" , "name" : "grape"});
db.fruit.save ({"_id" : "3" , "name" : "orange"});
db.fruit.save ({"_id" : "4" , "name" : "pineapple"});

db.basket.save ({"_id" : "1", "items" : [
    {"$ref" : "fruit", "$id" : "1", "quantity" : 5},
    {"$ref" : "fruit", "$id" : "3", "quantity" : 10}
]})
Run Code Online (Sandbox Code Playgroud)

现在,让我们找到"篮子"系列:

> db.basket.find ()
{ "_id" : "1", "items" : [
    {
        "$ref" : "fruit",
        "$id" : "1"
    },
    {
        "$ref" : "fruit",
        "$id" : "3"
    }
] }
Run Code Online (Sandbox Code Playgroud)

"数量"属性消失了?!谁知道为什么?还有其他选择吗?

谢谢.

Ram*_*Vel 8

dbref的语法是

  { $ref : <collname>, $id : <idvalue>[, $db : <dbname>] }
Run Code Online (Sandbox Code Playgroud)

但是您在dbref中添加了不受支持的数量字段.那就是问题所在.把它带到外面

db.basket.save ({"_id" : "1", "items" : [
    {"quantity" : 5 , item : {"$ref" : "fruit", "$id" : "1"}},
    {"quantity" : 10, item : {"$ref" : "fruit", "$id" : "3"}}
]})
Run Code Online (Sandbox Code Playgroud)

哪种看起来(吓人)

{
    "_id" : "1",
    "items" : [
        {
            "quantity" : 5,
            "item" : {
                "$ref" : "fruit",
                "$id" : "1"
            }
        },
        {
            "quantity" : 10,
            "item" : {
                "$ref" : "fruit",
                "$id" : "3"
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

但我的建议是,完全放弃dbref,只使用这样的简单结构

db.basket.save ({"_id" : "1",items:[
                        {item_id:"1",quantity:50},
                        {item_id:"3",quantity:10}
                ]})
Run Code Online (Sandbox Code Playgroud)

这个更干净,看起来很像

{
    "_id" : "1",
    "items" : [
        {
            "item_id" : "1",
            "quantity" : 50
        },
        {
            "item_id" : "3",
            "quantity" : 10
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)