首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mongoose使用$in,并且只更新一个最新的时间戳

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

Stack Overflow用户
提问于 2018-06-10 02:53:26
回答 1查看 143关注 0票数 1

不确定这是否可能,但是,我在一个集合中有很少的documentsdocuments中有重复项,唯一不同的是timestamp

例如:

代码语言:javascript
复制
{
    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字段有重复项,但我只想用最新的timestampverifiedtrue进行更新

但是timestamp确实是随机捕获的。

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

mongoose创建的时间戳示例

代码语言:javascript
复制
},
"updatedAt": {
    "$date": "2018-06-08T23:39:49.310Z"
},
"createdAt": {
    "$date": "2018-06-08T23:21:15.669Z"
},

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

代码语言:javascript
复制
const names = ['abc', 'eee'];

Model.update({
        'name': {
            $in: names
        }
    }, { verified: true }, { multi: true });

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 03:25:04

createdAt查找指定名称的最新文档:

代码语言:javascript
复制
const names = ['abc', 'eee'];

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

将查询结果作为Arraycursor保存在变量result中。

然后,您可以更新文档:

代码语言:javascript
复制
results.forEach((newestDocumentForName) => collection.update({_id: newestDocumentForName['_id']}, {/*your set operation*/});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档