{
"_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)有关吗?
如果这是一个重复的问题,请指导我!
谢谢!
答案 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
如果没有,那么应用程序必须有一个包含所有可能组合的键或枚举值列表,您必须查询并通过它们。