代码之家  ›  专栏  ›  技术社区  ›  Tsuna

mongoose使用$in,只更新一个最新的时间戳

  •  1
  • Tsuna  · 技术社区  · 6 年前

    不确定这是否可行,但是, 我很少有 documents 在集合中。中有重复项 文件 唯一的区别是 timestamp

    例如:

    {
        name: 'abc',
        verified: false,
        createdAt: 'timestamp1'
    },
    {
        name: 'abc',
        verified: false,
        createdAt: 'timestamp2'
    },
    {
        name: 'abc',
        verified: false,
        createdAt: 'timestamp3'
        },
    {
        name: 'eee',
        verified: false,
        createdAt: 'timestamp1'
    },
    {
        name: 'eee',
        verified: false,
        createdAt: 'timestamp2'
    }
    

    可以看到,有重复的 name 字段,但我只想更新为最新的 时间戳 , verified true

    但是 时间戳 是非常随机的。

    我可以用 update and $in 但这将更新所有文档,而不仅仅是最新的文档 时间戳

    Mongoose创建的时间戳示例

    },
    "updatedAt": {
        "$date": "2018-06-08T23:39:49.310Z"
    },
    "createdAt": {
        "$date": "2018-06-08T23:21:15.669Z"
    },
    

    这是我使用的简单代码 $in

    const names = ['abc', 'eee'];
    
    Model.update({
            'name': {
                $in: names
            }
        }, { verified: true }, { multi: true });
    

    事先谢谢你的帮助。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Matthias Herrmann timelfelt    6 年前

    createdAt

    const names = ['abc', 'eee'];
    
    collection.aggregate(
    [
       {$match: {'name': {$in: names}}},
       {$group: {_id: '$name', createdAt: {$max: '$createdAt'}}},
    ]);
    

    result Array cursor

    results.forEach((newestDocumentForName) => collection.update({_id: newestDocumentForName['_id']}, {/*your set operation*/});