如何查询MongoDB中的邻居元素?

How to query neighbor elements in MongoDB?

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

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

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

例如: 排序后:

9 12 20 32 34 77

查询应该return 20 32 34.

您永远不会在单个查询操作中获得此信息,但可以通过 "three" 查询获得。第一个从所需元素中获取 "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 }
}));

在 "single query" 中要求这样做本质上是在要求 "join",而 MongoDB 基本上不会这样做。它是一个"Set Intersection"的离散结果,在SQL中基本上是一个"join"操作。