如何通过匹配 ObjectId 字段从嵌套数组中删除对象

Posted

技术标签:

【中文标题】如何通过匹配 ObjectId 字段从嵌套数组中删除对象【英文标题】:How to remove an object from a nested array by match ObjectId field 【发布时间】:2018-11-21 18:32:31 【问题描述】:

我的网络应用有团队和用户。将用户添加到团队时,会在团队成员数组中创建一个新成员对象。用户 ObjectId 保存在成员对象下。现在,我需要处理一个用户被删除的情况,这意味着该成员应该从在其成员数组下​​找到该用户的所有团队中删除。我使用猫鼬和nodeJs

注意:我无法通过 objectId 字段匹配

【问题讨论】:

寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及必要的最短代码 重现它在问题本身。没有明确的问题陈述的问题对其他读者没有用处。见:How to create a Minimal, Complete, and Verifiable example. 显示你的架构 这就是您的问题关闭时可能附加的信​​息,除非您现在接受建议,否则肯定会如此。您的“问题”读起来就像是聊天室的开场白。这不是那个,所以请通过实际显示一个“可重现的例子”来“提出问题”,就像给出的链接中概述的那样 【参考方案1】:

我正在尝试根据您的描述来回答。如果您发现任何问题,请上传具体代码和您的架构结构。

var ObjectId = require('mongoose').Types.ObjectId; 

Team.update(
   ,
   $pull:  members:  _id: new ObjectId(id)   , // Here , id is variable where your userid is stored
   multi: true 
)

希望对您有所帮助。

【讨论】:

不需要multi true,因为objectID总是唯一的,而在mongoose中不需要单独转换为Object id,我们可以直接传递字符串 Lalit tnx 为您的回复!尽管您正确理解了我,但它似乎不起作用。也许我需要在最后拯救团队?还是使用匹配? Ratan,用户 obj/document 关联的团队可以很多 Lalit,我也需要查询部分。我很难找到正确的语法 const TeamSchema = new Schema( members: [ _id: false, member: type: Schema.Types.ObjectId, ref: 'User', required: true, 角色: _id: false, roleName: type: String, default: 'Employee', required: true , usePushEach: true);

以上是关于如何通过匹配 ObjectId 字段从嵌套数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章

如何更新嵌套数组MongoDb Node js中的必填字段[重复]

如何通过改造将数组嵌套对象 Json 解析为 Kotlin?

如何匹配 MongoDB 中的子文档数组?

如何匹配MongoDB中的子文档数组?

仅返回嵌套数组中匹配的子文档元素

从嵌套数组$拉