Mongoose从数组内的数组中拉出对象

时间:2017-03-16 19:17:41

标签: arrays node.js mongodb mongoose pull

我目前正在使用带有Mongoose的Node.js来操作MongoDB数据库。我想从数组中的数组本身中删除一个对象。

var newTable = new module.Table({
  "_id": ObjectId("1"),
  "name": "Table1",
  "items": [
    {
      "_id": ObjectId("11"),
      "name": "Item1",
      "subscribers": [
        {
          "itemId": "111"
        },
        {
          "itemId": "112"
        }
      ]
    }
  ]
}).save();

我已经尝试过此查询,但它没有效果:

module.Table.update(
  { "items._id": "11" },
  { $pull: { "items.$.subscribers": { "itemId": "112" } } },
  { "safe": true },
  function (err, obj) {
    if (err) console.log(filename + " @ module.Table.update(): " + err);
  }
);

请帮我查询一下。

  

注1:ObjectId(" xxx")是此示例的简化参考。

     

注意2:我发现了错误,这是我的错误,查询需要id为字符串(而不是ObjectId)。

1 个答案:

答案 0 :(得分:0)

虽然杰克·布莱克在评论中部分正确,但由于遇到问题,我想进一步澄清此答案。 就我而言,解决方案如下:

  1. 在您的脚本中导入猫鼬(注意其导入方式)。
const mongoose = require('mongoose');
  1. 然后确保您要更新许多文档,请使用updateMany()
await Order.updateMany({},{
  $pull: {
    'products': mongoose.Types.ObjectId(req.params.id)
  },
}).exec();

请注意,ObjectId是不是 new mongoose.mongo.ObjectId(),而是mongoose.Types.ObjectId()