从 Mongo DB 文档的数组中的对象数组中删除一个值

Posted

技术标签:

【中文标题】从 Mongo DB 文档的数组中的对象数组中删除一个值【英文标题】:Delete a value from an array of an object in an array in a Mongo DB document 【发布时间】:2021-11-15 04:10:10 【问题描述】:

美好的一天,感谢您抽出宝贵时间回答我的问题!

我正在学习如何编码,这是我在这里的第一个问题:

我有一个 MongoDB 集合,其结构类似于以下示例。每个文档代表一个时期,用户提供了该时期的可用性。


    "_id": id,
    "period": 20218,
    "availabilities": [
        "User": id1,
        "Username": "Cool Guy",
        "Useravailabilities": [9, 13, 14, 28, 29]
    , 
        "User": id2,
        "Username": "Nice Guy",
        "Useravailabilities": [1, 2, 13, 29, 30]
    ],



    "_id": id,
    "period": 20219,
    "availabilities": [...],


    "_id": id,
    "period": 202110,
    "availabilities": [...],

我得到一个句点(例如 20218)、一个用户 ID(例如 id2)和一天(例如 13),应该从相应的 Useravailabilities 数组中删除它们。此查询不起作用,有人可以帮忙吗?

DB.updateOne("period": 20218, "availabilities.User": id2 , $pull : "availabilities.$.Useravailabilities": 13 )

提前感谢您,祝您度过愉快的一天

【问题讨论】:

【参考方案1】:
 DB.updateOne(
     period: 20218 ,
     $pull:  'availabilities.$[elem].Useravailabilities': 13  ,
     arrayFilters: [ 'elem.User': id2 ] 
  );

【讨论】:

感谢您的回复。现在我得到:Error: Could not find path "undefined.0.User" in schema at castArrayFilters 也许它与我的架构有关? new mongoose.Schema( period: Number, availabilities: [] ) 对不起,我写错了代码。我刚改了,你可以再试一次。

以上是关于从 Mongo DB 文档的数组中的对象数组中删除一个值的主要内容,如果未能解决你的问题,请参考以下文章

mongo db:从对象数组中获取子数组,其值在单个文档的范围内

合并数组中的两个对象,其中一个对象的键嵌套比另一个对象更深,位于 Mongo DB 的同一文档中

从Mongo DB嵌套数组中获取不同的值并输出到单个数组

Mongo - 如果子文档数组中的对象具有值,则添加字段

从集合中删除文档并从另一个集合中的数组中删除 Id

如何从 mongoose 的 mongo 文档中返回一个数组?