1

我有一个集合“详细信息”。

{
   "_id": ObjectId("50e876e49d5d0cbc08000001"),
   "user_id": "50e876e49d5d0cbc08000000",
   "left": NumberInt(1),
   "right": NumberInt(2)
}   
{
   "_id": ObjectId("50e876b79d5d0c040a000001"),
   "user_id": "50e876b79d5d0c040a000000",
   "left": NumberInt(3),
   "right": NumberInt(4)
}   

我想在 MongoDB 中编写一个类似于 SQL 的查询,如下所示:

SELECT node.user_id
FROM details AS node,
        details AS parent
WHERE node.left BETWEEN parent.left AND parent.right
       AND parent.user_id = "50e876e49d5d0cbc08000000"
ORDER BY node.left;
4

1 回答 1

2

您可以先查询 parent,然后使用它来查询其他所有内容:

parent = db.details.findOne({user_id: ObjectId("50e876e49d5d0cbc08000000")});
query = {left: {$gt: parent.left, $lt: parent.right}};
select = {user_id: 1};
db.details.find(query,select).sort({left: 1})

如果要查询“大于或等于”和“小于或等于”而不是“大于”和“小于”,则将 and$gt替换为$ltand $gte$lte

于 2013-01-05T21:05:16.173 回答