Object.keys,如何获取mongodb中的键列表

时间:2013-10-10 16:22:02

标签: javascript node.js mongodb mongodb-query

{
"_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)有关吗?

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

最好的办法是将架构更改为数组:

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

然后你可以查询

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

请注意,这将返回整个对象,包括所有颜色,即查询约束不适用的颜色。这可以使用聚合框架来解决,但同样,只使用$unwind,这也需要colors作为数组。

答案 1 :(得分:0)

这是你在找什么? MongoDB Get names of all keys in collection

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