Arrays 如何在MongoDB中更新阵列?
我收集了大约40份文件。 我需要更新两个数组中的一些元素。文档的数组如下所示Arrays 如何在MongoDB中更新阵列?,arrays,mongodb,Arrays,Mongodb,我收集了大约40份文件。 我需要更新两个数组中的一些元素。文档的数组如下所示 "array1": [ { "id" : "2030170", "date1" : ISODate("2016-01-04T07:10:00.000Z"), "date2" : ISODate("2016-01-04T08:00:00.000Z") } ], "array2": [ { "Id" : "43463565",
"array1": [
{
"id" : "2030170",
"date1" : ISODate("2016-01-04T07:10:00.000Z"),
"date2" : ISODate("2016-01-04T08:00:00.000Z")
}
],
"array2": [
{
"Id" : "43463565",
"date1" : ISODate("2016-01-04T07:10:00.000Z"),
"date2" : ISODate("2016-01-04T08:00:00.000Z")
}
]
如何更新两个数组中的date1和Date2字段
我正在使用java脚本更新另一个数据。
看起来像
db.getCollection('my.collec').update({ "myId" : { $gte: 293, $lte: 438}},
{
"$currentDate": { "time1": true },
"$set": {
"time2": true,
"time3": true
}
}, { multi: true }
)
我试着这样做:
db.getCollection('my.collec').update({ "myId" : { $gte: 293, $lte: 438}},
{
"$currentDate": { "time1": true },
"$set": {
"time2": true,
"time3": true,
"array1.0.date1": true,
"array1.0.date2": true,
"array2.0.date1": true,
"array2.0.date2": true
}
}, { multi: true }
)
但我得到的不是当前日期,而是“真”。对于时间之类的变量,一切正常。我想知道为什么所有文档都不在一个数组中?无论如何,请尝试:
db.YOURCOLLECTION.update(
{$and: [
{ date1: {$lt: $currentDate}},
{ date2: {$lt: $currentDate}}
]
},
{
date1 : $currentDate,
date2 : $currentDate
},
{upsert: true}
)
编辑:有一件事我注意到$currentDate不会自动转换为ISO,因此您需要在上面的更新表达式中显式输入所需的时间戳(根据上面的绅士),将$currentDate替换为ISO中的该值,或者使用转换库
见:
我需要更新一些数组中的一些元素
很高兴知道标准是什么
如何更新两个数组中的date1和Date2字段,以便
这些字段将不会添加到没有这些字段的对象中
假设只更新array1和array2第一个元素
db.josef.update({
"array1": {
$size: 1
},
"array2": {
$size: 1
}
},
{
$set: {
"array1.0.date1": ISODate("2011-01-01T00:00:00.0000Z"),
"array1.0.date2": ISODate("2011-01-01T00:00:00.0000Z"),
"array2.0.date1": ISODate("2011-01-01T00:00:00.0000Z"),
"array2.0.date2": ISODate("2011-01-01T00:00:00.0000Z")
}
},
{
multi: true
})
如何更新两个数组中的date1和Date2字段,以便
这些字段将不会添加到没有这些字段的对象中
默认情况下,upsert为false,因此不会添加它