MongoDB: агрегировать значение индекса в массиве объектов со значением элемента 'x' - PullRequest
1 голос
/ 16 марта 2020

Я пытаюсь работать из этой части документации: https://docs.mongodb.com/manual/reference/operator/aggregation/indexOfArray/

и мой вариант использования практически идентичен, за исключением того, что вместо массива значений у меня есть массив объектов:

{ "_id" : 1, "items" : [
    {x: "one", y: "two", z: "three"}, 
    {x: "four", y: "five", z: "six"},
    {etc...}
]}

В этом примере приведен следующий пример: db.inventory.aggregate([{$project: {index: {$indexOfArray: [ "$items", 2 ] }}}]

2 - это выражение поиска для поиска в выражении массива $items.

Моя проблема в том, что я пытаюсь найти индекс объекта, где элемент y равен myVariableValue. Пробовал много разных комбинаций, изменяя синтаксис, но ничего не возвращал, кроме -1, что означает, что он не был найден.

db.collection.aggregate([
    {$match: {_id: id}},
    {$project: {index: {$indexOfArray: [ "$items", {y: myVariableValue} ] }}}
]);

Кажется, не работает и думал, что это определенно будет.

Какой правильный синтаксис поиска я ищу, чтобы вернуть правильное значение индекса? Спасибо!

1 Ответ

1 голос
/ 16 марта 2020

Ваш синтаксис $indexOfArray должен быть таким:

  {
    $project: {
      index: {
        $indexOfArray: [
          "$items.y",
          myVariableValue
        ]
      }
    }
  }

Playground

Было бы хорошо, если бы существовал пример для массива объектов в Документы Mongodb.

...