【问题标题】:mongodb: array filtering by index or another fieldmongodb:按索引或其他字段过滤数组
【发布时间】:2017-01-17 20:19:19
【问题描述】:

过滤数组时,是否可以:

  1. 按项目索引过滤(例如,获取除第一个以外的所有数组元素)?

  2. 按包含数组字段的同一文档中的另一个字段中的值过滤?

考虑文件:

{
   _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']}
            }

【问题讨论】:

  • 你说的过滤,是指聚合管道中的过滤阶段?
  • 在聚合管道的项目阶段过滤数组,就像我包含的示例代码一样。

标签: mongodb


【解决方案1】:

如下使用$setDifference

db.collection.aggregate([
    {
        "$project": {
            "repeats": {
                "$setDifference": ["$seen_on", ["$first_seen_on"]]
            }
        }
    }
])

样本输出

/* 1 */
{
    "_id" : 1,
    "repeats" : [ 
        20160313, 
        20160324
    ]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2017-06-14
    • 2020-06-01
    • 2016-11-23
    相关资源
    最近更新 更多