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()