MongoDB - DBRef - PullRequest
       15

MongoDB - DBRef

0 голосов
/ 03 января 2012

У меня проблемы с 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"
    }
] }

Атрибут "количество" исчез?! Кто-нибудь знает почему? Есть ли альтернатива?

Спасибо.

1 Ответ

8 голосов
/ 03 января 2012

Синтаксис для dbref равен

  { $ref : <collname>, $id : <idvalue>[, $db : <dbname>] }

Но вы добавили неподдерживаемое поле количества внутри dbref. Это проблема. возьми это снаружи

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

какой вид выглядит (страшно)

{
    "_id" : "1",
    "items" : [
        {
            "quantity" : 5,
            "item" : {
                "$ref" : "fruit",
                "$id" : "1"
            }
        },
        {
            "quantity" : 10,
            "item" : {
                "$ref" : "fruit",
                "$id" : "3"
            }
        }
    ]
}

Но мой совет, вообще откажитесь от 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
        }
    ]
}
...