Mongodb 如何在数组中找到被对象包围的特定元素?

Mongodb 如何在数组中找到被对象包围的特定元素?,mongodb,mongodb-query,Mongodb,Mongodb Query,这是我在MongoDB中的文档内容。它有一个对象时间戳和许多数组 { "timestamps":{ "1200":[ "390.288", "390.818", "So" ], "1175":[ "381.778", "382.248", "so" ], "1183":[ "383.668",

这是我在MongoDB中的文档内容。它有一个对象时间戳和许多数组

{
   "timestamps":{
      "1200":[
         "390.288",
         "390.818",
         "So"
      ],
      "1175":[
         "381.778",
         "382.248",
         "so"
      ],
      "1183":[
         "383.668",
         "383.928",
         "a"
      ],
      "1144":[
         "372.588",
         "372.718",
         "up"
      ],
      "1162":[
         "377.638",
         "377.928",
         "rial"
      ],
      "1218":[
         "395.798",
         "395.868",
         "me"
      ],
      "1145":[
         "372.718",
         "373.188",
         "So"
      ]
   }
}

我怎样才能找到
So
这个词,它位于
1200th
索引中,它们的时间戳位于该数组的第0个索引和第1个索引中?

由于您的对象键未知,您应该从运算符开始,该运算符可以将
时间戳
转换为一个键和值数组,如下所示:

{
    "k" : "1144",
    "v" : [ "372.588", "372.718", "up"]
},
{
    "k" : "1145",
    "v" : [ "372.718", "373.188", "So"]
},
...
然后,您可以使用仅获取
v
包含输入短语的文档。整个聚合可以如下所示:

var input = "me";
db.col.aggregate([
    {
        $project: {
            foundElements: {
                $filter: {
                    input: { $objectToArray: "$timestamps" },
                    as: "ts",
                    cond: { $ne: [ { $indexOfArray: [ "$$ts.v", input ] }, -1 ] }
                }
            }
        }
    },
    {
        $project: {
            foundElements: {
                $map: {
                    input: "$foundElements",
                    as: "element",
                    in: { $slice: [ "$$element.v", 2 ] }
                }
            }
        }
    }
])
如果数组不包含指定的短语,则返回
-1
。若要重塑结果,可以使用,它将从数组中获取前两个元素(第0个和第1个)

输出:

{ "_id" : ..., "foundElements" : [ [ "395.798", "395.868" ] ] }

那么这里的预期输出是什么呢?那么,如果我在文档中找到
me
,我应该能够得到
“395.798”、“395.868”
。OP的几个问题:您是在问如何仅从mongoDB返回这些值,还是如何解析从mongoDB返回的整个对象以获得这些值?此外,“So”在您的示例中匹配多个属性,但您只引用第一个属性,预期输出是否只与第一个匹配有关?最后,到目前为止,你尝试了什么?你在哪里被卡住了?如果将您现有的工作包括在内,前两个问题可能已经得到了回答。