【问题标题】:Referring to Document Field Value When Setting Another Field in MongoDB [duplicate]在MongoDB中设置另一个字段时引用文档字段值[重复]
【发布时间】:2016-09-06 09:56:00
【问题描述】:

我正在尝试做一个表面上看起来很基本的查询。但是,我似乎无法高效而优雅地做到这一点。即,我有以下文件:

{
  id:
  runtime: {
    start: Date
    end:  Date
    total: number
  }
  events: [runtime1, runtime2, ...]
}

在某个 API 调用后,我想将 runtime.end 设置为当前日期,然后将运行时对象中包含的内容推送到事件数组中。

这是我一直在尝试使用的代码:

router.get('/stop/:id', function(req,res){
    var collection = db.get('Activity');

    collection.update({
        _id: req.params.id
    },
    {
        $set: {
            "runtime.started": false,
            "runtime.endDate": new Date()
        },
        $push: {events: {
                            startDate: new Date,
                            endDate: new Date
                         }
        }   
    }, 
    function(err, activity){
        if (err) throw err;
        res.json(activity);
    });

});

知道如何做到这一点吗?上面的代码似乎什么也没做,除了编辑runtime 对象。

附:我在 2010 - 2012 年发现了几个问题和答案,表明这无法完成。从那以后情况发生了变化吗?

【问题讨论】:

  • 您的代码是否给出了错误或与预期不同的结果,如果是,请详细说明两者。
  • 上面的代码似乎什么也没做,除了编辑runtime对象。我在控制台中没有看到任何错误。
  • 代码中没有实际的运行时对象。
  • $set: { "runtime.started": false, "runtime.endDate": new Date() },
  • @JohnnyHK 谢谢。有没有你可以建议的解决方法?

标签: json node.js mongodb


【解决方案1】:

检查您的 MongoDB 版本。您可能需要升级到最新版本。另外,请尝试单独使用 $push(没有集合,就像 MongoDB 文档示例中一样)。

【讨论】:

    猜你喜欢
    • 2011-02-06
    • 2016-12-26
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多