Mongodb 查找然后更新
Mongodb find and then update
我想要 运行 一个查询,该查询获取所有具有 'active' 字段的文档和 运行 一个自定义函数来检查 'date' 文档中的字段早于 10 天。如果它们都为真,那么它将使活动字段为假。
这是我当前代码的样子:
db.ad.find( { $and : [ // Check if active is true and the $where clause also equals to true
{ 'active' : true
},
{ '$where' : function() { // Custom compare function
var date = new Moment(this.date); // gets the date from the current document
var date2 = new Moment();
return Math.abs(date.diff(date2, 'days')) > 10;
}
}
]},
function(err, result) {
// How to update the document here?
}
);
谁能告诉我如何在查找查询后更新文档?
根据您要在更新中执行的操作,您可以使用 db.collection.update
并将 multi
标志设置为 true。假设您要将名为 olderThan10Days
的成员设置为 True
。您可以像这样使用 update
而不是 find
:
db.ad.update(
{
active: True,
date: {
$lte: "date10DaysAgo"
}
}
},
{
$set : { olderThan10Days : True}
},
{
multi: True
})
否则你可以只遍历你的 result
变量和 update
或 save
它单独。
使用 update()
method with the $set
修饰符运算符更新活动字段。与更新查询对象一样,您可以通过从日期中减去十天来将日期对象设置为十天前:
var d = new Date();
d.setDate(d.getDate() - 10);
var query = { /* query object to find records that need to be updated */
"active": true,
"date": { "$lte": d }
},
update = { /* the replacement object */
"$set": {
"active": false
}
},
options = { /* update all records that match the query object, default is false (only the first one found is updated) */
"multi": true
};
db.ad.update(query, update, options, callback);
-- 编辑--
使用 momentjs 库,获取 10 天前的日期可以很简单(使用 add()
方法)
d = moment().add(-10, 'days');
或使用subtract()
方法
d = moment().subtract(10, 'days');
我想要 运行 一个查询,该查询获取所有具有 'active' 字段的文档和 运行 一个自定义函数来检查 'date' 文档中的字段早于 10 天。如果它们都为真,那么它将使活动字段为假。
这是我当前代码的样子:
db.ad.find( { $and : [ // Check if active is true and the $where clause also equals to true
{ 'active' : true
},
{ '$where' : function() { // Custom compare function
var date = new Moment(this.date); // gets the date from the current document
var date2 = new Moment();
return Math.abs(date.diff(date2, 'days')) > 10;
}
}
]},
function(err, result) {
// How to update the document here?
}
);
谁能告诉我如何在查找查询后更新文档?
根据您要在更新中执行的操作,您可以使用 db.collection.update
并将 multi
标志设置为 true。假设您要将名为 olderThan10Days
的成员设置为 True
。您可以像这样使用 update
而不是 find
:
db.ad.update( { active: True, date: { $lte: "date10DaysAgo" } } }, { $set : { olderThan10Days : True} }, { multi: True })
否则你可以只遍历你的 result
变量和 update
或 save
它单独。
使用 update()
method with the $set
修饰符运算符更新活动字段。与更新查询对象一样,您可以通过从日期中减去十天来将日期对象设置为十天前:
var d = new Date();
d.setDate(d.getDate() - 10);
var query = { /* query object to find records that need to be updated */
"active": true,
"date": { "$lte": d }
},
update = { /* the replacement object */
"$set": {
"active": false
}
},
options = { /* update all records that match the query object, default is false (only the first one found is updated) */
"multi": true
};
db.ad.update(query, update, options, callback);
-- 编辑--
使用 momentjs 库,获取 10 天前的日期可以很简单(使用 add()
方法)
d = moment().add(-10, 'days');
或使用subtract()
方法
d = moment().subtract(10, 'days');