【问题标题】:Mongoose pull object from array inside arrayMongoose 从数组中的数组中拉出对象
【发布时间】:2017-08-08 03:43:50
【问题描述】:

我目前正在使用 Node.js 和 Mongoose 来操作 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)。

【问题讨论】:

  • 我看到的第一件事是你有{ "itemId": ObjectId("112") } }。你意识到javascript没有objectId。您可能需要执行以下操作:new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca') 将某些内容转换为对象 ID 以检查数据库中的对象 ID。看起来您的 objectIds 无效。所以我不知道您如何使用这些 objectID。你遇到了什么错误?
  • 你说得对,我忘了说明 ObjectId("xxx") 是这个例子的简化引用。

标签: arrays node.js mongodb mongoose pull


【解决方案1】:

虽然 jack Blank 在 cmets 中部分正确,但我想进一步澄清这个答案,因为我遇到了麻烦。 就我而言,解决方案如下:

  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()

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 2016-04-25
    • 2020-11-21
    • 2016-03-16
    • 2021-07-27
    • 2018-09-10
    • 2021-07-01
    • 1970-01-01
    相关资源
    最近更新 更多