2012-02-17 33 views
0

我使用mongo,在這裏我遇到了一些問題。我想獲得一條記錄,但我只是在記錄中有一個數組列表的ID。這是我的數據看起來像。從列表中獲取mongo的記錄mongo

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

我只是102b000000爲得到記錄,我需要從那裏得到的菜單,但我無法與標準蒙戈得到它。有誰能夠幫助我 ?

回答

1

其實水果在你的模式是不是數組,它是一個對象的名單,因爲這裏面只有一條路一個水果ID獲得root文件:

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

在上面查詢,你應該知道的序獲取根文件的水果數量。

但是,如果你可以重新設計你的數據庫,如下所示:

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

你可以很容易通過嵌入式陣列的產品ID獲取根文檔:

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

我同意大部分內容安德魯說,但相反,我會重新設計模式,以便實際擁有一個數組。在這種情況下,你的文件看起來像:

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

然後你就可以獲取與根文件:

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

是啊,如果他真的不需要果序數,那麼IDS的陣列將是更好的選擇。 – 2012-02-17 10:39:34