Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-DBRef_Mongodb_Find_Dbref - Fatal编程技术网

MongoDB-DBRef

MongoDB-DBRef,mongodb,find,dbref,Mongodb,Find,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 ({"

我在使用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}
]})
现在,让我们查找“篮子”集合:

> db.basket.find ()
{ "_id" : "1", "items" : [
    {
        "$ref" : "fruit",
        "$id" : "1"
    },
    {
        "$ref" : "fruit",
        "$id" : "3"
    }
] }
“数量”属性消失了?!有人知道为什么吗?还有别的选择吗

谢谢。

is的语法

哪种表情(恐怖)

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

db.basket.save ({"_id" : "1",items:[
                        {item_id:"1",quantity:50},
                        {item_id:"3",quantity:10}
                ]})
这更干净,看起来像

{
    "_id" : "1",
    "items" : [
        {
            "item_id" : "1",
            "quantity" : 50
        },
        {
            "item_id" : "3",
            "quantity" : 10
        }
    ]
}

但在最后一种方法中,如何获取所有项数据,如连接?为了澄清,DBRef中支持其他字段,因为它实际上只是一个BSON对象;但是,在呈现值时,MongoDB shell隐藏除
$ref
$id
和可选的
$db
字段以外的字段。一些ODM实际上在DBRef对象中存储额外的值(原则使用类鉴别器值来实现)。也就是说,如果总是引用同一数据库和集合中的对象,那么没有DBRef肯定会更好,因为在这种情况下,
$ref
$db
是无用的开销。
{
    "_id" : "1",
    "items" : [
        {
            "quantity" : 5,
            "item" : {
                "$ref" : "fruit",
                "$id" : "1"
            }
        },
        {
            "quantity" : 10,
            "item" : {
                "$ref" : "fruit",
                "$id" : "3"
            }
        }
    ]
}
db.basket.save ({"_id" : "1",items:[
                        {item_id:"1",quantity:50},
                        {item_id:"3",quantity:10}
                ]})
{
    "_id" : "1",
    "items" : [
        {
            "item_id" : "1",
            "quantity" : 50
        },
        {
            "item_id" : "3",
            "quantity" : 10
        }
    ]
}