0

我目前有一个 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}})
4

2 回答 2

1

您应该修改架构,以便您有一致的键名来查询。我使用聚合框架遇到了类似的问题,请参阅问题:子文档中所有键的总值

像这样的东西应该可以工作(未经测试):

{
"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}
            }
        }

    )

查询嵌套数组可能有点棘手,请务必阅读文档。在这种情况下,$elemMatch需要这样做,因为否则您会返回一个包含一些trait_score_modifier my new dimension但匹配valuedimension不同数组元素的键中的文档。

于 2013-10-08T20:48:00.950 回答
0

您的查询中需要 $elemMatch 条件。

参考:http ://docs.mongodb.org/manual/reference/projection/elemMatch/

让我知道您是否需要查询。

于 2013-10-09T01:01:44.103 回答