mongodb投影匹配子数组

时间:2015-04-18 06:07:50

标签: php mongodb

我是mongodb的新手。我有一个mongodb文档,其结构如下:

"prices": {
     "0": {
       "Quantity": {
         "1": "10",
         "2": "14",
         "5": "16",
      },
       "option1": "a4",
       "option2": "50",
       "option3": "qwe",
       "option4": "sdslk" 
    },
     "1": {
       "Quantity": {
         "1": "20",
         "2": "12",
         "10": "3",
      },
       "option1": "a5",
       "option2": "100",
       "option3": "kl",
       "option4": "oiuio" 
    },
     "2": {
       "Quantity": {
         "10": "20",
         "15": "12",
         "100": "3",
      },
       "option1": "a2",
       "option2": "10",
       "option3": "kadl",
       "option4": "qwqw" 
    },
    ...
}

我有像这样的PHP数组

Array => ("option1" => "a2",
           "option2"=> "10",
           "option3"=> "kadl",
           "option4"=> "qwqw" 
)

我想查询文档,使其与mongodb文档中的特定子数组匹配,并返回以下结果

"2": {
   "Quantity": {
   "10": "20",
   "15": "12",
   "100": "3",
},
"option1": "a2",
"option2": "10",
"option3": "kadl",
"option4": "qwqw" 
}

但仅限于所有对应的值(数量匹配除外)。 选项(option1,option2,...)对于不同的文档是不同的。 请评论是问题不清楚

1 个答案:

答案 0 :(得分:0)

不可能,因为您不知道要匹配的密钥的名称。也许您希望prices实际上是一个数组?

 { "prices" : [{ 
    "Quantity": {
        "10": "20",
        "15": "12",
        "100": "3",
     },
     "option1": "a2",
     "option2": "10",
     "option3": "kadl",
     "option4": "qwqw" 
}] }

然后你可以得到你想要的东西:

db.test.find({ "prices" : { "$elemMatch" : { "option1" : "a2", "option2" : "10", "option3" : "kadl", "option4" : "qwqw" } } }, { "prices.$" : 1 })