我有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 }
我想使用确切的范围查询(不是排序+跳过)。有可能吗?
更新 对不起,我的例子很准确。
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)。
答案 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 })