Mongodb - взять только один элемент во вложенном массиве - PullRequest
0 голосов
/ 21 октября 2018

Я использую mongodb для хранения своих данных.Моя коллекция состоит из списка объектов, идентифицированных по типу, списка других объектов для каждого из них.

Пример моей коллекции:

[
  {
    "type": "a",
    "properties": [
      {
        "value": "value_a",
        "date": "my_date_a"
      },
      {
        "value": "value_b",
        "date": "my_date_b"
      },
      ...
    ]
  },
  ...
]

На основе приведенной выше структуры данныхЯ хочу получить все коллекции по заданному типу, принимая для каждой из них только один элемент во вложенном массиве (сокращая вложенный список до списка только из одного элемента).

Итак, учитывая тип "a ", примером результата может быть:

[
  {
    "type": "a",
    "properties": [
      {
        "value": "value_a",
        "date": "my_date_a"
      }
    ]
  },
  ...
]

Я начал пробовать этот запрос { "type": "a" } для фильтрации коллекций.Но как я могу сделать, чтобы взять только один элемент "свойства"?Я не могу использовать оператор "slice".

Большое спасибо.

1 Ответ

0 голосов
/ 21 октября 2018

Я предполагаю из вашей ссылки на слайс, что вы не заинтересованы в сопоставлении определенного вложенного элемента, а скорее просто получаете значение с фиксированным индексом (например, 0).

Если выЕсли вы хотите использовать конвейер агрегации, вы можете использовать arrayElementAt в проекции:

db.collection.aggregate([
    // matches documents with type 'a'
    { $match: { type: 'a' } }, 
    // creates a new document for each
    { $project: { 
        // that contains the original value for type
        type: 1, 
        // and the first element from the original properties for properties
        properties: { $arrayElemAt: [ "$properties", 0 ] } 
    } }
])
...