联合在mongodb的同一个集合

时间:2013-02-17 17:52:55

标签: mongodb mongodb-query

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

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

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

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

作为mongodb的新手,我无法找到为这样的操作编写查询的正确方法,我相信在mongodb中一定是可能的。

  

如果不可能,请你建议一个替代的nosql解决方案。

1 个答案:

答案 0 :(得分:5)

与您正在寻找的最接近的MongoDB运算符是$or,但这与SQL UNION不完全相同,{{3}}将两个单独的查询合并为一个结果。 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(或使用多个集合/查询的其他操作),则必须编写多个查询并将结果集合并到应用程序代码中。