首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB更新查询多准则

MongoDB更新查询多准则
EN

Stack Overflow用户
提问于 2017-05-23 14:33:14
回答 1查看 2.3K关注 0票数 1

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

代码语言:javascript
复制
"username" : "bla",
"timeslots" : [
        {
                "lab" : 0,
                "timestamp" : 1495494000000,
                "durationfactor" : 4
        },
        {
                "lab" : 1,
                "timestamp" : 1495494000000,
                "durationfactor" : 4
        },
        {
                "lab" : 3,
                "timestamp" : 1495508400000,
                "durationfactor" : 4
        }

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

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

代码语言:javascript
复制
db.users.update(
    {"timeslots.timestamp" : 1495494000000, "timeslots.lab": 1},
    { $set: {"timeslots.$.timestamp" : 1495508400000,"timeslots.$.durationfactor" : 4}} 
    ,false 
    ,true
);

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

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

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

如果同一个实验室有两个不同的时间戳(相反的情况),则不会发生这种行为。所以我现在真的很傻。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-23 14:38:12

$elemMatch

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

代码语言:javascript
复制
db.users.update(
    {"timeslots" : { "$elemMatch":{"timestamp": 1495494000000, "lab": 1}}},
    { $set: {"timeslots.$.timestamp" : 1495508400000,"timeslots.$.durationfactor" : 4}} 
    ,false 
    ,true
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44137731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档