Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB更新查询多个条件_Mongodb_Mongodb Query - Fatal编程技术网

MongoDB更新查询多个条件

MongoDB更新查询多个条件,mongodb,mongodb-query,Mongodb,Mongodb Query,我的用户对象包含一个带有timeslotobjects的timeslots数组(如下所示) 当我更新这些对象时,我得到了一个wierd异常情况 我的更新查询(异常情况示例): 基本上,它会检查(至少应该检查)timestamp和lab是否等于特定值。这种组合是唯一的(实验室不能在同一时间戳上重叠,它们“正在使用”) 除非我在同一个时间戳上有两个不同的实验室,否则这很有效 在所提供的示例中,我希望将实验室1更新为实验室3的时间。但结果是实验室0将被更新 如果同一实验室有两个不同的时间戳(相反的情况

我的用户对象包含一个带有timeslotobjects的timeslots数组(如下所示)

当我更新这些对象时,我得到了一个wierd异常情况

我的更新查询(异常情况示例):

基本上,它会检查(至少应该检查)timestamp和lab是否等于特定值。这种组合是唯一的(实验室不能在同一时间戳上重叠,它们“正在使用”)

除非我在同一个时间戳上有两个不同的实验室,否则这很有效

在所提供的示例中,我希望将实验室1更新为实验室3的时间。但结果是实验室0将被更新

如果同一实验室有两个不同的时间戳(相反的情况),则不会发生此行为。所以我现在真的目瞪口呆

我试图使用
{“$and”:
并强制使用组合查询条件,但这没有帮助

我假设update查询只更新时隙数组的第一个元素,但我不知道如何修复它。

$elemMatch运算符将包含数组字段的文档与至少一个匹配所有指定查询条件的元素相匹配

db.users.update(
    {"timeslots" : { "$elemMatch":{"timestamp": 1495494000000, "lab": 1}}},
    { $set: {"timeslots.$.timestamp" : 1495508400000,"timeslots.$.durationfactor" : 4}} 
    ,false 
    ,true
);

如果我想匹配我的两个标准,然后只更新或插入新的,该怎么办?新的插入将通过
upsert=true
进行,但标准应该完全匹配。
db.users.update(
    {"timeslots.timestamp" : 1495494000000, "timeslots.lab": 1},
    { $set: {"timeslots.$.timestamp" : 1495508400000,"timeslots.$.durationfactor" : 4}} 
    ,false 
    ,true
);
db.users.update(
    {"timeslots" : { "$elemMatch":{"timestamp": 1495494000000, "lab": 1}}},
    { $set: {"timeslots.$.timestamp" : 1495508400000,"timeslots.$.durationfactor" : 4}} 
    ,false 
    ,true
);