Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB查询帮助:嵌套对象中的elemMatch_Mongodb - Fatal编程技术网

MongoDB查询帮助:嵌套对象中的elemMatch

MongoDB查询帮助:嵌套对象中的elemMatch,mongodb,Mongodb,但这些都不起作用: > db.test.insert({"a" : { "b" : { "c" : { "d1" : [ "e1" ], "d2" : [ "e2" ], "d3" : [ "e3", "e4" ], "d4" : [ "

但这些都不起作用:

> db.test.insert({"a" : { "b" : { "c" : { "d1" : [ "e1" ],
                                          "d2" : [ "e2" ], 
                                          "d3" : [ "e3", "e4" ], 
                                          "d4" : [ "e5", "e6" ] } } } })
> db.test.find({'a.b.c' : {$exists : true}})
{ "_id" : ObjectId("4daf2ccd697ebaacb10976ec"), "a" : { "b" : { "c" : { "d1" : [ "e1" ], "d2" : [ "e2" ], "d3" : [ "e3", "e4" ], "d4" : [ "e5", "e6" ] } } } }
假设我不知道
c
d1
d4
的值是什么。是否有一种通用的方法来搜索嵌套对象的结构中的特定值

我以为那就是
$elemMatch
的目的

多谢各位

我以为那就是$elemMatch的目的

From:使用$elemMatch查询运算符,可以匹配数组中的整个文档

这听起来不像你要找的

是否有一种通用的方法来搜索嵌套对象的结构中的特定值

听起来像是要在“对象‘c’中的所有内容中搜索‘e1’的实例”

MongoDB支持两个相关的特性,但这些特性并不完全是您想要的

  • 深入对象,点符号:
    db.test.find({'a.b.c.d1':'e1'})
  • 通读数组:`db.test.find({'a.b.c.d4':'e5'})
听起来你在寻找同时做这两件事的能力。您希望在同一查询中“访问对象”和“读取数组”


不幸的是,我不知道有这样的功能。您可能想对此进行查询。

我相信您要查找的查询是

> db.test.find({'a.b': "c"})
> db.test.find({'a.b': {$elemMatch : {"c" : {$exists: true}}}})
> db.test.find({'a.b': {$elemMatch : {$elemMatch : {$all : ["e1"] }}}})

值得称赞的是,你非常接近

检查$elemMatch。谢谢,我这样做了。是的,这个查询很有效,但我正在寻找一种方法,当您不知道中间键(
b
在本例中)是什么时,可以通过嵌套对象的键或值进行搜索。我希望很快可以使用。
db.test.find({ 'a.b.c': { '$exists': true } });