不确定这是否可行,但是,
我在集合中只有documents
。 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
字段有重复项,但我只想更新最近的timestamp
,verified
到true
但是timestamp
实际上是随机的。
我可以使用update and $in
,但这会更新所有文档,而不只是更新timestamp
由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 });
提前感谢您的帮助。
答案 0 :(得分:2)
按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*/});