Получить запись монго из массива списка монго - PullRequest
0 голосов
/ 17 февраля 2012

Я использую монго, и у меня есть небольшая проблема здесь.Я хочу получить запись, но у меня просто есть идентификатор списка массивов внутри записи.Вот как выглядят мои данные.

{    
   "_id": ObjectId("1113000001"),    
   "menu": "desertsunday",   
  "fruit": {
      "0": ObjectId("102b000000"),
      "1": ObjectId("5200000000"),
      "2": ObjectId("2900000000"),
      "3": ObjectId("9870000002")   } 
 }

У меня просто есть 102b000000 для получения записи, мне нужно получить меню оттуда, но я не могу получить его со стандартным монго.Кто-нибудь может мне помочь?

Ответы [ 2 ]

5 голосов
/ 17 февраля 2012

Я согласен с большей частью того, что говорит Эндрю, но вместо этого я бы изменил схему, чтобы у вас действительно был массив.В этом случае ваш документ будет выглядеть так:

    {    
       "_id": ObjectId("1113000001"),    
       "menu": "desertsunday",   
       "fruit": [
          ObjectId("102b000000"),
          ObjectId("5200000000")
        ]
    }

Тогда вы можете получить корневой документ с помощью:

    db.items.find({"fruit": ObjectId("102b000000")}) 
1 голос
/ 17 февраля 2012

На самом деле фрукты в вашей схеме - это не массив, это список объектов, поэтому есть только один способ получить корневой документ по одному идентификатору плода:

db.items.find({"fruit.0": ObjectId("102b000000")}) 

В приведенном выше запросе вы должны знать порядковый номер плода для получения корневого документа.

Но если вы можете изменить структуру вашей базы данных следующим образом:

{    
   "_id": ObjectId("1113000001"),    
   "menu": "desertsunday",   
   "fruit": [
      { i:0, id: ObjectId("102b000000") },
      { i:1, id: ObjectId("5200000000") }
    ]
}

Вы можете легко получить корневой документ, вставив идентификатор элемента массива:

db.items.find({"fruit.id": ObjectId("102b000000")}) 
...