如何通过MongoDB中的几个字段创建范围过滤器?

时间:2015-09-28 14:51:15

标签: mongodb mongodb-query

我有Mongo系列

{ A: 1, B: 1, C: 1 }
{ A: 1, B: 1, C: 2 }
{ A: 1, B: 2, C: 1 }
{ A: 1, B: 2, C: 2 }
{ A: 2, B: 1, C: 1 }
{ A: 2, B: 1, C: 2 }
{ A: 2, B: 2, C: 1 }
{ A: 2, B: 2, C: 2 }

使用A,B和C的复合索引。现在我想查询大于{ A: 2, B: 1, C: 1 }的记录。结果应该是

{ A: 2, B: 1, C: 2 }
{ A: 2, B: 2, C: 1 }
{ A: 2, B: 2, C: 2 }

我想使用确切的范围查询(不是排序+跳过)。有可能吗?

更新 对不起,我的例子很准确。

  1. 结果不是更大,而是更大或相等。
  2. 我想查询整个字段集A,B和C,而不是单独查询。
  3. Thx @BlakesSeven的建议。

    这是另一个例子:

    大于{ A: 1, B: 1, C: 2 }

    { A: 1, B: 2, C: 1 }
    { A: 1, B: 2, C: 2 }
    { A: 2, B: 1, C: 1 }
    { A: 2, B: 1, C: 2 }
    { A: 2, B: 2, C: 1 }
    { A: 2, B: 2, C: 2 }
    

    更新2: 对不起我的一个不明确的问题。我试着再解释一下: 我有几个字段(A,B和C)排序的集合。我使用compound indexes { A: 1, B: 1, C: 1 }。分类收集:

    1: { A: 1, B: 1, C: 1 }
    2: { A: 1, B: 1, C: 2 }
    3: { A: 1, B: 2, C: 1 }
    4: { A: 1, B: 2, C: 2 }
    5: { A: 2, B: 1, C: 1 }
    6: { A: 2, B: 1, C: 2 }
    7: { A: 2, B: 2, C: 1 }
    8: { A: 2, B: 2, C: 2 }
    

    我有一些记录(例如5),我想查询按此顺序更大的记录(6,7,8)。

2 个答案:

答案 0 :(得分:0)

棘手但可能

 var a = 1;
 var b = 2
 var c = 3;
 var value = a*100+b*10+c;
 db.collection.aggregate([{$project:{_id:0,A:1,B:1,C:1,D:{$add:[{$multiply:[100,"$A"]},{$multiply:[10,"
$B"]},"$C"]}}},{$match:{D:{$gt:value}}}]);

答案 1 :(得分:0)

Mongo具有min()功能,在这种情况下完全使用。
所以对于收集

{ A: 1, B: 1, C: 1 }
{ A: 1, B: 1, C: 2 }
{ A: 1, B: 2, C: 1 }
{ A: 1, B: 2, C: 2 }
{ A: 2, B: 1, C: 1 }
{ A: 2, B: 1, C: 2 }
{ A: 2, B: 2, C: 1 }
{ A: 2, B: 2, C: 2 }

查询"更大或等于" { A: 1, B: 1, C: 2 }

db.collection.find().sort({A: 1, B: 1, C: 1}).min({ A: 1, B: 1, C: 2 })