Mongodb-仅在嵌套数组中使用一个元素

时间:2018-10-21 14:16:58

标签: arrays mongodb filter nested

我正在使用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" }来过滤集合。但是,如何只采用一个“属性”元素呢?我不能使用“切片”运算符。

非常感谢。

1 个答案:

答案 0 :(得分:0)

从您对切片的引用中,我假设您对匹配特定的嵌套元素不感兴趣,而只是对固定索引(例如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 ] } 
    } }
])