我目前有一个Question对象,我不知道如何查询它?
{ "title" : "Do you eat fast food?"
"answers" : [
{
"_id" : "506b422ff42c95000e00000d",
"title" : "Yes",
"trait_score_modifiers" : {
"hungry" : 1
}
},
{
"_id" : "506b422ff42c95000e00000e",
"title" : "No",
"trait_score_modifiers" : {
"not-hungry" : -1
}
}]
}
我试图找到查询trait_score_modifieres的问题(有时它存在,有时不存在)
我有以下但它不是动态的:
db.questions.find({"answers.trait_score_modifiers.not-hungry":{$exists: true}})
我怎么能这样做?
db.questions.find({"answers.trait_score_modifiers.{}.size":{$gt: 0}})
答案 0 :(得分:1)
您应该修改架构,以便查询一致的键名。我使用聚合框架遇到了类似的问题,请参阅问题:Total values from all keys in subdocument
这样的事情应该有效(未经测试):
{
"title" : "Do you eat fast food?"
"answers" : [
{
"title" : "Yes",
"trait_score_modifiers" : [
{"dimension": "hungry", "value": 1}
]
},
{
"title" : "No",
"trait_score_modifiers" : [
{"dimension": "not-hungry", "value": -1}
]
}]
}
您可以使用以下内容返回所有具有动态维度的问题(例如“我的新维度”)
db.questions.find("answers.trait_score_modifiers.dimension": "my new dimension")
或将返回的内容限制为在该维度上具有特定值的问题(例如> 0):
db.questions.find(
"answers.trait_score_modifiers": {
"$elemMatch": {
"dimension": "my new dimension",
"value": {"$gt": 0}
}
}
)
查询嵌套数组可能有点棘手,请务必阅读documentation在这种情况下,需要$elemMatch
,否则您将返回包含trait_score_modifier
{的文档{1}}但匹配的my new dimension
位于不同数组元素的value
键中。
答案 1 :(得分:0)
您的查询中需要$ elemMatch条件。
请参阅:http://docs.mongodb.org/manual/reference/projection/elemMatch/
如果您需要查询,请告诉我。