$推入深层嵌套的数组猫鼬

$push into deeply nested array mongoose

我的userSchema如下...

const userSchema = new mongoose.Schema({
    firstName: { type: String },
    lastName: { type: String },
    movies: [
        {
            name: String,
            duration: Number,
            actors: [{ name: String, age: Number }]
        }
    ],
});

在我的带有 express 的 NodeJS 应用程序中,我正在尝试更新我的 actors 数组以让另一个具有来自 req.body.

的值的 actor

我以为我可以做这样的事情...

await User.updateOne(
     {
          _id: req.user.id
          movies._id: req.params.id
     },
     {
          $push: { 'movies.actors': req.body }
     }
)

我认为这会将演员推入指定的电影req.params.id,但实际上什么也没做。

试试这个:

await user.updateOne(
            {$and:[{_id: req.user.id},{movie.name: 'I am Legend'}]},
            {$set: { movies.actors:req.body}},
        );

尝试以这种方式使用 positional operator $

db.collection.update({
  "_id": 1,
  "movies._id": 1
},
{
  "$push": {
    "movies.$.actors": req.body
  }
})

请注意,唯一的区别是 $ 的使用。但是对于位置运算符,你说的是 mongo 将新数据推送到哪里。

正如文档所说:

The positional $ operator identifies an element in an array to update without explicitly specifying the position of the element in the array.

因此您可以更新元素 movies.actors 在不知道元素位置的情况下推送新数据。

示例here