从一个包含数组的数组中删除对象

3

我目前使用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)。


1
我看到的第一件事是你有 { "itemId": ObjectId("112") } }。你知道JavaScript没有objectId。你可能需要做类似这样的事情:new mongoose.mongo.ObjectId('56cb91bdc3464f14678934ca'),这将把某些东西转换为objectId以检查数据库中的对象ID。而且看起来你的objectIds是无效的。所以我不知道你是如何处理这些objectIDs的。你得到了什么错误? - jack blank
你说得对,我忘了解释 ObjectId("xxx") 在这个例子中是简化的引用。 - Jonathan
1个回答

0

虽然Jack Blank在评论中部分正确,但我想进一步澄清这个答案,因为我也遇到了问题。

  1. 在你的脚本中导入mongoose(注意导入方式)。
const mongoose = require('mongoose');

2. 然后确保在更新多个文档的情况下使用updateMany()。
await Order.updateMany({},{
  $pull: {
    'products': mongoose.Types.ObjectId(req.params.id)
  },
}).exec();

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接