【发布时间】:2017-10-23 13:53:56
【问题描述】:
我的用户对象包含一个带有时间槽对象的时间槽数组(如下所示)。
"username" : "bla",
"timeslots" : [
{
"lab" : 0,
"timestamp" : 1495494000000,
"durationfactor" : 4
},
{
"lab" : 1,
"timestamp" : 1495494000000,
"durationfactor" : 4
},
{
"lab" : 3,
"timestamp" : 1495508400000,
"durationfactor" : 4
}
当我更新这些对象时,我得到了一个奇怪的异常情况。
我的更新查询(异常案例示例):
db.users.update(
{"timeslots.timestamp" : 1495494000000, "timeslots.lab": 1},
{ $set: {"timeslots.$.timestamp" : 1495508400000,"timeslots.$.durationfactor" : 4}}
,false
,true
);
基本上它会检查(至少应该)时间戳和实验室是否等于特定值。这种组合是独一无二的(实验室不能在同一个时间戳上重叠,它们处于“使用中”)
这很有效,除非我在同一时间戳上有两个不同的实验室。
在提供的示例中,我希望将实验室 1 更新到实验室 3 的时间。但结果是实验室 0 将被更新。
如果同一实验室有两个不同的时间戳(相反的情况),则不会发生此行为。所以我现在真的傻眼了。
我也尝试使用{"$and": 来强制组合查询条件,但没有帮助。
我假设更新查询只是更新时间段数组的第一个元素,但我不知道如何解决这个问题。
【问题讨论】:
标签: mongodb mongodb-query