首页 > 解决方案 > 使用数组作为子对象在 mongodb 中创建新条目

问题描述

我的猫鼬模式看起来像这样

{
   name: String,
   posts: [
       {
            title: String,
            description: String,
            tags: [String]
       }
   ]
}

我需要将一个条目推送到一个现有条目,即

item = {
   title: 'Abc',
   description: 'abcabcabcabc',
   tags: [
       'aa', 'bb', 'cc'
   ]
}

那么该怎么做呢?我试过了 User.updateOne({ _id: id }, { $push: { posts: item } });

如果posts.tags 不是对象数组而只是一个值,那么该命令有效。但是,当必须传递相同的数组时,就会出现问题。

编辑:使用指定值创建对象,但tags数组为空

标签: mongodbmongoose

解决方案


您不能直接推送所有值数组。使用 $each 将值数组推送到帖子数组,如下所示,

db.collection.update({
  "_id": ObjectId("5a934e000102030405000000")
},
{
  $push: {
    posts: {
      $each: [
        {
          title: "Abc",
          description: "abcabcabcabc",
          tags: [
            "aa",
            "bb",
            "cc"
          ]
        },
        {
          title: "Abc",
          description: "abcabcabcabc",
          tags: [
            "aa",
            "bb",
            "cc"
          ]
        }
      ]
    }
  }
})

https://mongoplayground.net/p/QWy4Wu4ldvl


推荐阅读