MongoDB,如何使用文档作为数组中搜索文档的最小单元?
很抱歉这个标题,但我真的不知道怎么说清楚。但我可以给你看 这里我插入了两份文件MongoDB,如何使用文档作为数组中搜索文档的最小单元?,mongodb,Mongodb,很抱歉这个标题,但我真的不知道怎么说清楚。但我可以给你看 这里我插入了两份文件 > db.test.find().pretty() { "_id" : ObjectId("557faa461ec825d473b21422"), "c" : [ { "a" : 3, "b" : 7 } ] } { "_id" : ObjectId("557faa4c1ec825d473b21423
> 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”小于“b”的文档,如“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”,即使它不在数组中的同一文档中,所以选择了第二个文档
但我只想选择第一个
我发现了这一点,但这个例子似乎不适合我的情况。使用如下:
db.test.find({"c":{"$elemMatch":{"a":{"$lte":4},"b":{"$gte":4}}}})
或
使用方法如下:
db.test.find({"c":{"$elemMatch":{"a":{"$lte":4},"b":{"$gte":4}}}})
或
你会想
db.test.findOne({ c: {$elemMatch: {a: {$lte: 4}, b: {$gte: 4} } } })
通过查询,您正在搜索在“c”数组中具有键“a”且值为4的对象的文档
第二条记录是return,因为c[0]。a=4
由于您指定只选择第一个文档,因此您需要执行findOne()而不是find()
db.test.findOne({ c: {$elemMatch: {a: {$lte: 4}, b: {$gte: 4} } } })
通过查询,您正在搜索在“c”数组中具有键“a”且值为4的对象的文档
第二条记录是return,因为c[0]。a=4
因为您指定只选择第一个文档,所以您需要执行findOne()而不是find()