【问题标题】:mongodb projection matching sub arraymongodb投影匹配子数组
【发布时间】:2015-04-18 06:07:50
【问题描述】:

我是 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 doc 中的特定子数组并返回以下结果

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

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

【问题讨论】:

    标签: php mongodb


    【解决方案1】:

    不可能,因为您不知道要匹配的键的名称。也许您希望 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 })
    

    【讨论】:

      猜你喜欢
      • 2016-03-26
      • 2023-03-04
      • 1970-01-01
      • 2015-05-12
      • 2021-07-23
      • 2019-01-13
      • 2018-11-13
      • 2018-11-23
      相关资源
      最近更新 更多