对不起标题,但我真的不知道如何说清楚。但是我可以给你看。
这里我插入了两个文件
> db.test.find().pretty()
{
"_id" : ObjectId("557faa461ec825d473b21422"),
"c" : [
{
"a" : 3,
"b" : 7
}
]
}
{
"_id" : ObjectId("557faa4c1ec825d473b21423"),
"c" : [
{
"a" : 1,
"b" : 3
},
{
"a" : 5,
"b" : 9
}
]
}
>
我只想选择第一个文件,其值大于' a'小于'',如' 4'。
但是当我搜索时,我无法得到我想要的结果
> db.test.find({'c.a': {$lte: 4}, 'c.b': {$gte: 4}})
{ "_id" : ObjectId("557faa461ec825d473b21422"), "c" : [ { "a" : 3, "b" : 7 } ] }
{ "_id" : ObjectId("557faa4c1ec825d473b21423"), "c" : [ { "a" : 1, "b" : 3 }, { "a" : 5, "b" : 9 } ] }
>
因为' 4'大于' a" :1'小于" b" :9'在第二个文档中,即使它不在数组中的同一个文档中,也选择了第二个文档。
但我只想选择第一个。
我发现了这个http://docs.mongodb.org/manual/reference/operator/query/elemMatch/#op._S_elemMatch,但似乎这个例子不适合我的情况。
答案 0 :(得分:0)
使用$elemMatch,如下所示:
db.test.find({"c":{"$elemMatch":{"a":{"$lte":4},"b":{"$gte":4}}}})
或者
db.test.find({"c":{"$elemMatch":{"a":{"$lte":4},"b":{"$gte":4}}}},{"c.$":1})
答案 1 :(得分:0)
你想要
db.test.findOne({ c: {$elemMatch: {a: {$lte: 4}, b: {$gte: 4} } } })
根据您的查询,您正在搜索“c'”中包含对象的文档。具有键的数组' a'值< = 4,键' b'值> gt; = 4.
第二条记录是return,因为c [0] .a是< = 4,而c [1] .b是> = 4。
由于您指定只想选择第一个文档,因此您需要执行findOne()而不是find()。