【问题标题】:Need help to write MongoDB Query需要帮助编写 MongoDB 查询
【发布时间】:2014-06-03 07:00:58
【问题描述】:

假设我的收藏中有以下文档:

{
   "Tag-1": "val-1",
   "Tag-2":
      {
        "S_Tag-1": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"},
        "S_Tag-2": {"SS_Tag_1":"SS_Tag_Val_3","SS_Tag_2":"SS_Tag_Val_3"},
        "S_Tag-3": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"},
      }
}

现在我想获取S_Tag 的所有孩子,其孩子的价值为"SS_Tag_Val_1"

预期输出为:

"S_Tag-1": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"}
"S_Tag-3": {"SS_Tag_1":"SS_Tag_Val_1","SS_Tag_2":"SS_Tag_Val_2"}

如何在 MongoDB 中实现这一点?

提前致谢!

【问题讨论】:

  • 为了更清楚地说明:您想搜索一个值,但您没有指定哪个标签应该包含该值?

标签: mongodb mapreduce mongodb-query


【解决方案1】:

文档结构可以更好地为您提供其他选择。但是您将需要 JavaScript 处理来过滤和匹配它,所以最好的方法是 mapReduce:

db.collection.mapReduce(
    function () {

        var obj = {};
        var count = 0;

        for ( var t in this["Tag-2"] ) {

            for ( var k in this["Tag-2"][t] ) {
                if ( this["Tag-2"][t][k] === "SS_Tag_Val_1" ) {
                    obj[t] = this["Tag-2"][t];
                    count++;
                    break;
                }
            }

        }

        if ( count != 0 )
            emit( this._id, obj );

    },
    function(){},
    { "out": { "inline": 1 } }
)

给你:

    "results" : [
            {
                    "_id" : ObjectId("538ea58506bfa12156d3041a"),
                    "value" : {
                            "S_Tag-1" : {
                                    "SS_Tag_1" : "SS_Tag_Val_1",
                                    "SS_Tag_2" : "SS_Tag_Val_2"
                            },
                            "S_Tag-3" : {
                                    "SS_Tag_1" : "SS_Tag_Val_1",
                                    "SS_Tag_2" : "SS_Tag_Val_2"
                            }
                    }
            }
    ]

所以你需要一些变体来满足你的实际情况,你可以遍历你拥有的对象结构。由于设置的路径,这不是最好的查询。考虑使用数组来简化查询。

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多