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