5

我需要最可行的方法来搜索具有以下结构的文档。

{ _id:"",
var1: number,
var2: number,
var3: number,
}

在 sql 方式中,我需要的结果集是这三个的 UNION(n 条记录按 var1 排序,n 条记录按 var2 排序,n 条记录按 var3 排序)

使用 UNION 我希望删除重复项。

作为 mongodb 的新手,我无法找到为此类操作编写查询的正确方法,我相信在 mongodb 中它必须是可能的。

如果万一它不可能,您能否建议一个替代的 nosql 解决方案。

4

1 回答 1

7

与您要查找的内容最接近的 MongoDB 运算符是,但这与将两个单独的查询组合成一个结果的SQL UNION$or并不完全相同。MongoDB 查询始终针对单个集合,但允许您拥有多个查询子句。$or

例如:

db.collection.find(
    // Find documents matching any of these values
    {$or:[
        {var1: 123},
        {var2: 456},
        {var3: 789}
    ]}
).sort(
    // Sort in ascending order
    {var1:1, var2:1, var3:1}
)

由于您仅限于查询单个集合,因此已经在文档级别对结果进行了重复数据删除,并且如果指定了一个,所有结果将共享相同的排序顺序。

如果您想在 MongoDB 中模拟 UNION(或使用多个集合/查询的其他操作),则必须编写多个查询并在应用程序代码中合并结果集。

于 2013-02-18T02:32:35.537 回答