我有DateOfBirth
类型的字段String
。目前,我正在以date
格式存储yyyy-MM-ddTHH:mm:ss Z
。
现在我想将现有数据库中的日期格式更改为yyyy-MM-dd
我现在不想要时间我只想修改我如何使用mongodb
中的查询来做到这一点。 / p>
db.profile.update( {}, { $set : { "physical.dateOfBirth" : "2012-01-11" } }, true, true);
我尝试使用此查询但我没有得到理想的结果。
答案 0 :(得分:0)
目前,除了增量和减量之外,您无法根据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);
}