过滤数组时,是否可能:
按项目索引过滤(例如,获取所有数组元素,但第一个)?
在包含数组字段的同一文档中的另一个字段中按值过滤?
考虑文件:
{
_id: 1,
first_seen_on: 20160312,
seen_on: [20160312, 20160313, 20160324]
}
我需要seen_on
数组成为[20160313,20160324]
这似乎不起作用(我认为$first_seen_on
被视为字面值):
'repeats': {
'$filter': {
'input': '$seen_on',
'as': 'date',
'cond': {'$ne': ['$date', '$first_seen_on']}
}
答案 0 :(得分:1)
使用 $setDifference
,如下所示
db.collection.aggregate([
{
"$project": {
"repeats": {
"$setDifference": ["$seen_on", ["$first_seen_on"]]
}
}
}
])
示例输出
/* 1 */
{
"_id" : 1,
"repeats" : [
20160313,
20160324
]
}