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中二维嵌套数组的投影和索引_Mongodb_Multidimensional Array_Mongodb Indexes - Fatal编程技术网

mongodb中二维嵌套数组的投影和索引

mongodb中二维嵌套数组的投影和索引,mongodb,multidimensional-array,mongodb-indexes,Mongodb,Multidimensional Array,Mongodb Indexes,我有几个与嵌套数组相关的问题,如本文所述。注意,几乎所有标题中带有嵌套数组的SO问题实际上都是指根文档中嵌套的单个数组,而不是二维嵌套数组。据我所知,这不是复制品 是否有任何方法可以在二维嵌套阵列上执行如上所述的投影? 如何在foo数组中数组的第二个元素上创建索引?再说一次,可能foo.1不起作用。 我知道正确的答案是TM不这样做,而是使用一系列子文档,伪NDTAUAOSD,但出于好奇-我似乎找不到答案,b不幸的是,我无法控制的情况决定了文档结构 更新:澄清我希望从预测中看到的内容: >

我有几个与嵌套数组相关的问题,如本文所述。注意,几乎所有标题中带有嵌套数组的SO问题实际上都是指根文档中嵌套的单个数组,而不是二维嵌套数组。据我所知,这不是复制品

是否有任何方法可以在二维嵌套阵列上执行如上所述的投影? 如何在foo数组中数组的第二个元素上创建索引?再说一次,可能foo.1不起作用。 我知道正确的答案是TM不这样做,而是使用一系列子文档,伪NDTAUAOSD,但出于好奇-我似乎找不到答案,b不幸的是,我无法控制的情况决定了文档结构

更新:澄清我希望从预测中看到的内容:

> db.foo.save({'foo': [{f0: 'a', f1: 'b'}, {f0: 'c', f1: 'd'}]})
> db.foo.save({'foo': [{f0: 'a', f1: 'e'}, {f0: 'f', f1: 'g'}]})
> db.foo.save({'foo': [['a', 'b'], ['c', 'd']]})
> db.foo.save({'foo': [['a', 'e'], ['f', 'g']]})
> db.foo.find({}, {'foo.f1': 1})
{ "_id" : ObjectId("52dddf7cbeb971f4081ea48a"), "foo" : [ { "f1" : "b" }, { "f1" : "d" } ] }
{ "_id" : ObjectId("52dddf83beb971f4081ea48b"), "foo" : [ { "f1" : "e" }, { "f1" : "g" } ] }
{ "_id" : ObjectId("52dddf88beb971f4081ea48c"), "foo" : [ [ ], [ ] ] }
{ "_id" : ObjectId("52dddf8dbeb971f4081ea48d"), "foo" : [ [ ], [ ] ] }
> db.foo.find({}, {'foo.1': 1})
{ "_id" : ObjectId("52dddf7cbeb971f4081ea48a"), "foo" : [ { }, { } ] }
{ "_id" : ObjectId("52dddf83beb971f4081ea48b"), "foo" : [ { }, { } ] }
{ "_id" : ObjectId("52dddf88beb971f4081ea48c"), "foo" : [ [ ], [ ] ] }
{ "_id" : ObjectId("52dddf8dbeb971f4081ea48d"), "foo" : [ [ ], [ ] ] }

基本上是跨内部阵列进行切片。

您可以使用positional$操作符进行投影:

虽然我不完全确定您的查询试图投射到什么上,但下面是一个示例:

db.foo.find({}, {'foo.1': 1})
{ "_id" : ObjectId("52dddf88beb971f4081ea48c"), "foo" : [ ['b'], ['d'] ] }
{ "_id" : ObjectId("52dddf8dbeb971f4081ea48d"), "foo" : [ ['e'], ['g'] ] }

澄清了OQ,以指定我希望重新投影2D阵列的内容。
> db.foo.find()
{ "_id" : ObjectId("5321ac073ac852396029fb90"), "foo" : [  {  "f0" : "a",  "f1" : "b" },  {  "f0" : "c",  "f1" : "d" } ] }
{ "_id" : ObjectId("5321ac073ac852396029fb91"), "foo" : [  {  "f0" : "a",  "f1" : "e" },  {  "f0" : "f",  "f1" : "g" } ] }
{ "_id" : ObjectId("5321ac073ac852396029fb92"), "foo" : [  {  "f0" : "a",  "f1" : "b" },  {  "f0" : "c",  "f1" : "d" },  { "f0" : "a", "f1" : "z" } ] }
{ "_id" : ObjectId("5321ac073ac852396029fb93"), "foo" : [  [  "a",  "b" ],  [  "c",  "d" ] ] }
{ "_id" : ObjectId("5321ac073ac852396029fb94"), "foo" : [  [  "a",  "e" ],  [  "f",  "g" ] ] }
{ "_id" : ObjectId("5321ac073ac852396029fb95"), "foo" : [  [  "a",  "e" ],  [  "f",  "g" ],  [  "a",  "z" ] ] }

// get the array document which has a field "f0" which matches "a"
b.foo.find({ "foo.f0" : "a" }, { "foo.$" : 1 })
{ "_id" : ObjectId("5321ac073ac852396029fb90"), "foo" : [  {  "f0" : "a",  "f1" : "b" } ] }
{ "_id" : ObjectId("5321ac073ac852396029fb91"), "foo" : [  {  "f0" : "a",  "f1" : "e" } ] }
{ "_id" : ObjectId("5321ac073ac852396029fb92"), "foo" : [  {  "f0" : "a",  "f1" : "b" } ] }
// ^ see that the last return document only returns the first array element match

// get the array element of the foo array
> db.foo.find({ "foo" : { "$elemMatch" : { "$in" : [ "a" ] } } }, { "foo.$" : 1 })
{ "_id" : ObjectId("5321ac073ac852396029fb93"), "foo" : [  [  "a",  "b" ] ] }
{ "_id" : ObjectId("5321ac073ac852396029fb94"), "foo" : [  [  "a",  "e" ] ] }
{ "_id" : ObjectId("5321ac073ac852396029fb95"), "foo" : [  [  "a",  "e" ] ] }
// ^ see that the last return document only returns the first array element match