2
{
"_id": "1",
"style": "13123",
"category": "dress",
"colors": {
    "Black": {
        "prestock": 50,
        "instock": 60,
        "inactive": 0
        },
    "Blue": {
        "prestock": 30,
        "instock": 0,
        "inactive": 0
        },
    "Red": {
        "prestock": 10,
        "instock": 60,
        "inactive": 0
        }
  }
}

我有上面的 json,我需要访问 prestock、instock 和 inactive。但是颜色的值会根据样式而变化。例如:

{
 "_id": "2",
 "style": "14321", 
 "category": "top",
 "colors": {
     "Green": {
        "prestock": 50,
        "instock": 60,
        "inactive": 0
         }, 
     "Yellow": {
        "prestock": 50,
        "instock": 60,
        "inactive": 0
         }
      }
}

我如何在 mongodb 中查询这个?这会与 Object.keys(obj) 相关吗?

ps.如果这是一个重复的问题,请指导我!

谢谢!

4

2 回答 2

2

根据SERVER-267{"colors.*.prestock" : {$gte:30}}不可能进行类似的查询,我怀疑这将在未来几年得到支持。

您最好的选择是将架构更改为数组:

colors: [
 { "color" : "Green", "instock" : 50, ... },
 { "color" : "Yellow", "instock" : 50, ... },
]

然后就可以查询了

db.foo.find( {"colors.prestock" : {$gte:30}} )

请注意,这将返回整个对象,包括所有颜色,也就是那些查询约束不成立的对象。这可以使用聚合框架来解决,但同样,仅使用$unwindwhich 也需要colors是一个数组。

于 2013-10-10T17:59:23.817 回答
0

这就是你要找的吗? MongoDB获取集合中所有键的名称

如果没有,那么应用程序必须有一个包含所有可能组合的键或枚举值列表,您必须查询并遍历它们。

于 2013-10-10T17:22:32.293 回答