【问题标题】:How to query neighbor elements in MongoDB?如何在 MongoDB 中查询相邻元素?
【发布时间】:2015-03-15 20:48:50
【问题描述】:

我正在实施一个排名系统。我有一个包含这样元素的集合:

{"_id" : 1, "count" : 32}
{"_id" : 2, "count" : 12}
{"_id" : 3, "count" : 34}
{"_id" : 4, "count" : 9}
{"_id" : 5, "count" : 77}
{"_id" : 6, "count" : 20}

我想编写一个查询,该查询返回一个元素,该元素具有{"id" : 1} 和 2 个其他相邻元素(按计数排序后)。共返回 3 个元素。

例如: 排序后:

9 12 20 32 34 77

查询应该返回20 32 34

【问题讨论】:

    标签: javascript mongodb sorting mongodb-query


    【解决方案1】:

    您永远不会在单个查询操作中获得此信息,但可以通过“三个”查询获得。第一个从所需元素中获取“count”的值,随后的则找到“preceding”和“following”值。

    var result = [];
    var obj = db.collection.findOne({ "_id": 1 }); // returns object as selected
    result.push(obj);
    // Preceding 
    result.unshift(db.collection.findOne({ 
        "$query": { "count": { "$lt": obj.count } },
        "$orderby": { "count": -1 }
    }));
    // Following
    result.push(db.collection.findOne({ 
        "$query": { "count": { "$gt": obj.count } },
        "$orderby": { "count": 1 }
    }));
    

    要求在“单个查询”中执行此操作本质上是要求“连接”,而 MongoDB 基本上不会这样做。它是一个"Set Intersection"的离散结果,在SQL中基本上是一个“join”操作。

    【讨论】:

    • 非常感谢您的解释,我之前想过使用 3 个查询,但我希望有更好的方法可以在 1 个查询中完成所有这些事情。我为每个帖子渲染排名表,所以这 3 个查询非常昂贵 T.T
    猜你喜欢
    • 1970-01-01
    • 2015-10-20
    • 2016-06-10
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多