目前,除了递增和递减之外,您不能更新基于mongodd当前值的值。
您将首先需要找到每个值,然后在再次保存之前更新它们。
你可以做多种方式:
get all profiles (only need _id and properties to update)
for each profile
set the value to its yyyy-MM-dd value
save profile
或
get all profiles (only need _id and properties to update)
create bulkOp
for each profile
set the value to its yyyy-MM-dd value
add update to bulkOp
execute bulkOp
或
aggregate to find distinct yyyy-MM-dd values
for each <yyyy-MM-dd value>
var match = {"physical.dateOfBirth": {$regex: <yyyy-MM-dd value>}};
var update = {$set: {"physical.dateOfBirth": <yyyy-MM-dd value>}};
var multi = {multi: true};
db.profiles.update(match, update, multi);
显然,这仅仅是你可以尝试的过程,而不是实际的代码。
最后一种方法将是最简单的内存,因为你实际上不会将很多内存加载到内存中,只是不同的值包含了具有相同日期的100个或1000个值。
好运
编辑:沿此线的东西:
在_id的$ cond是刚刚在1项匹配在一起的一切
var aggregate = db.profiles.aggregate({$group: {
_id: {$cond: ['_id', 'a', 'a']},
values: {$addToSet: { $dateToString: { format: '%Y-%m-%d', date: '$physical.dateOfBirth' } }}
}});
var values = aggregate[0].values;
for(var i = 0; i < values.length; i++) {
var date = new Date(values[i]);
var nextDay = new Date().setDate(date.getDate() + 1);
var match = {'physical.dateOfBirth': {$gte: date, $lte: nextDay}};
var update = {$set: {'physical.dateOfBirth': date}};
var multi = {multi: true};
db.profiles.update(match, update, multi);
}
请告诉我查询 –
“physical.dateOfBirth”有什么结构。 是{physical:{dateOfBirth:value}}还是{'physical.dateOfBirth':value}? –
它是{'physical.dateOfBirth':value} –