从list array mongo获取mongo的记录

时间:2012-02-17 09:32:04

标签: arrays mongodb atomic

我使用mongo,这里有一点问题。我想得到一条记录,但我只是在记录中有一个数组列表的id。这就是我的数据。

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

我只有102b000000用于获取记录,我需要从那里获取菜单但我无法用标准mongo获得它。有人能帮助我吗?

2 个答案:

答案 0 :(得分:5)

我同意Andrew所说的大部分内容,但相反,我会重新设计架构,以便您实际拥有一个数组。在这种情况下,您的文档将如下所示:

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

然后您可以使用以下命令获取根文档:

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

答案 1 :(得分:1)

实际上你架构中的水果不是数组,它是对象列表,因此只有一种方法可以通过一个水果ID来获取根文档:

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")})