如何在Mongoose中将新值推入嵌套数组

时间:2019-07-10 03:11:16

标签: arrays mongodb mongoose push

我正在使用猫鼬。如何将新值推入数组fixture2

这是我的收藏。我使用userHash来标识此文档。

{
    "_id" : ObjectId("5d2548beb1696f1a2d87d647"),
    "userHash" : "5c4b52fc2dfce2489c932e8fcd636a10",
    "fixtures" : [ 
        {
            "fixture1" : [ 
                "vote1", 
                "vote2"
            ],
            "fixture2" : [ 
                "vote1", 
                "vote2", 
                "vote3"
            ],
            "fixture3" : [ 
                "vote1"
            ]
        }
    ],
    "__v" : 0
}

fixtures可以包含任意数量的元素。在这种情况下,它只有3个。

这是我的模特。

var mongoose = require( 'mongoose' );
var votesSchema = mongoose.Schema({
  userHash: String, 
  fixtures: [{}]
});
module.exports = mongoose.model('votes', votesSchema);

但是,我正在努力尝试将值vote4推到fixture2。是否可以使用findOneAndUpdate来提交?

3 个答案:

答案 0 :(得分:1)

您可以使用$push来完成此操作。

示例:

YourModel.findOneAndUpdate(condition, {$push: {"fixtures.0.fixture2": "vote4"}})

答案 1 :(得分:1)

您可以使用以下查询

update(
  { "fixtures.fixture2": { "$exists": true } },
  { "$push": { "fixtures.$.fixture2": "vote4" } }
)

答案 2 :(得分:1)

您可以使用$(update)位置运算符来实现此目的。

此外,不要忘记在更新选项中使用{multi : true},以更新集合中的所有documents

尝试一下:

Votes.update(
  { "fixtures.fixture2": { "$exists": true } },
  { "$push": { "fixtures.$.fixture2": "vote4" } },
  { multi : true}
)

但这只会更新第一个匹配的Fixture2。

要更新fixture2数组中所有元素的fixtures,您可能想使用$[]

尝试一下:

Votes.update(
  { "fixtures.fixture2": { "$exists": true } },
  { "$push": { "fixtures.$[].fixture2": "vote4" } },
  { multi : true}
)

详细了解有关$[](positional-all)的信息。