node.js - MongoDB - 在 node.js 中使用多个 $elemMatch 运算符更新多个级别的子文档

标签 node.js mongodb

我对 MongoDB 很陌生,所以请怜悯我!我有一个如下所示的架构:

{
    "hour": 0,
    "minutes": [
        {
            "minute": 0,
            "minuteVolume": 0,
            "seconds": [
                {
                    "second": 0,
                    "secondVolume": 0
                },
                {
                    "second": 1,
                    "secondVolume": 0
                }
        },
        {
            "minute": 22,
            "minuteVolume": 0,
            "seconds": [
                {
                    "second": 0,
                    "secondVolume": 0
                },
                {
                    "second": 1,
                    "secondVolume": 0
                }
        }],
    "hourVolume": 0
}

我正在尝试更新特定的“secondVolume”“一分钟卷”。我尝试过以下方法:

collection.update({"hour": hour, 
    "minutes": {$elemMatch: {"minute": minute}},
    "minutes.seconds": {$elemMatch: {"second": second}}},
            { $inc: {hourVolume: 1, "minutes.$.minuteVolume": 1, "minutes.$.minuteVolume.seconds.$.second": 1}
                },
        {upsert:false,safe:true},
        function(err,data){
            if (err){
                console.log(err);
            }
            else
                {
                console.log(data);
                }
        }
    );
  • 但我显然做错了什么。如果我删除 "second"$elemMatch 并仅尝试更新 "minuteVolume",它就可以正常工作。这让我相信我在位置运算符上做错了什么,或者我的查询没有正确展开文档。

这甚至可以通过 MongoDB 中的单个查询实现吗?我使用的是 mongodb 驱动程序版本 1.4.19。

提前非常感谢!

最佳答案

看来你可以我以及为该功能投票的 240 人。 https://jira.mongodb.org/browse/SERVER-831

如果您知道元素的位置(可能通过首先查询文档),您可以使用位置运算符而不是使用 $elemMatch 进行更新。

{ $inc: {hourVolume: 1, "minutes.0.minuteVolume": 1, "minutes.0.minuteVolume.seconds.2.second": 1 }

我必须重做多个架构以防止多重嵌套,从而允许一次性更新。

关于node.js - MongoDB - 在 node.js 中使用多个 $elemMatch 运算符更新多个级别的子文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26850030/

相关文章:

javascript - 在启动之前请求用户应用程序时出错

json - 在对象上调用 JSON.stringify 时,NPM 'should' 库导致循环引用错误

Nodejs 上的 MySQL 连接池

MongoDB 快速启动在安装过程中失败

ruby-on-rails - Mongoid : HABTM does not preserve insertion order

javascript - 操作 `users.insertOne()` 缓冲在 10000ms 后超时,Node.js,MongooseError

mongodb - 如何在 Mongoose Schema 中表示 MongoDB GeoJSON 字段?

angularjs - 应在 MEAN 堆栈中的哪个位置创建验证规则?

node.js - 错误 : npm is known not to run on Node. js v

node.js - 如何从文本文件中的 node.js 中的特定行位置删除行