当前位置: 首页 > 知识库问答 >
问题:

从Mongoose/MongoDB中的数组中删除对象

鄂育
2023-03-14

我是mongoDB新手,在使用Mongoose从mongoDB中的数组中删除团队对象时遇到困难。我的用户收藏看起来像;

{  "orders":[],
   "teams":[
      {
         "teamname":"Team One",
         "_id":{"$oid":"566a038404ebcdc344c5136c"},
         "members":[
            {
               "firstname":"Member ",
               "lastname":"Three",`enter code here`
               "email":"memberthree@team.com",
               "initials":"MT",
               "_id":{"$oid":"566a038404ebcdc344c5136d"}
            },
         ]
      },
      {
         "teamname":"Team Two",
         "_id":{"$oid":"566a07f404ebcdc344c51370"},
         "members":[
            {
               "firstname":"Member",
               "lastname":"Two",
               "email":"membertwo@team.com",
               "initials":"MT",
               "_id":{"$oid":"566a07f404ebcdc344c51371"}
            },
         ]
      },
      {
         "teamname":"Team Three",
         "_id":{"$oid":"566a083504ebcdc344c51373"},
         "members":[
            {
               "firstname":"Member",
               "lastname":"Four",
               "email":"memberfour@team.com",
               "initials":"MF",
               "_id":{"$oid":"566a083504ebcdc344c51374"}
            },
         ]
      }
   ],
} 

我的移除路线看起来像;

exports.getTeamDelete = function(req, res) {

  User.findById(req.user.id, function(err, user) {
    if (err) return next(err);
    var selectedTeamIndex;
    for (i = 0; i < user.teams.length; i++){
      if (user.teams[i]._id==req.params.teamid){
        selectedTeamIndex=i;
        break
      }
    }

    console.log("before", user.teams)
    console.log(req.params.teamid)

    teamID=req.params.teamid;
    userID=req.user.id;

    User.update(
    {'_id': userID},
    { $pull: { "teams" : { teamID } } },
    { multi: true },
                 function(err, data){
                      console.log(err, data);
                 }
    );

    user.markModified("teams");
    user.save(function(err) {
      console.log("after", user.teams)
      if (err) return next(err);
      req.flash('success', { msg: 'Team deleted' });
    });
  });
};

控制台在用户之前和之后记录日志。更新是完全相同的,我没有得到任何错误抛出。控制台的输出。日志(错误、数据)最终被删除

null { ok: 1, nModified: 0, n: 1 } 

我不知道该怎么解释。我也尝试过不按这里的建议传入userID;https://stackoverflow.com/a/24289161/574869无济于事(同样的结果)。此外,我还尝试过按以下方式进行用户更新:;

User.update(
    {'_id': userID},
    { $pull: { "teams" : { id: teamID } } },
    false,
    true
);

这里提到https://stackoverflow.com/a/15641895/574869导致和错误的;

    /Users/markbreneman/Desktop/GatherRoundApp/node_modules/mongoose/lib/query.js:2022
      oldCb(error, result ? result.result : { ok: 0, n: 0, nModified: 0 });
      ^

TypeError: oldCb is not a function

我也不知道如何解释。如果有人对我做错了什么有任何见解,或者如何轻松地将一个团队从我的团队阵列中删除,我会很高兴。

共有1个答案

施冠玉
2023-03-14
User.update( 
    { "_id" : userID} , 
    { "$pull" : { "teams" : { "_id" :  teamID } } } , 
    { "multi" : true }  
)
 类似资料:
  • 文件: 我想从“数组”项中删除一个项,而不知道文档的_id,只知道元素的id,我有一个查找元素的查询,它在mongodb shell中工作,但在mongoose中不工作, 你知道为什么吗? 你能给我同等的猫鼬吗? 我应该如何从列表中提取该项,而只知道它的_id?

  • 问题内容: 文件: 有没有办法从数组中提取特定对象?IE如何从项数组中提取ID为23的整个项对象。 我努力了: 但是我很确定我没有正确使用’pull’。据我了解,pull将从数组中拉出字段,而不是对象。 关于如何将整个对象从数组中拉出的任何想法。 另外,我尝试在mongoose / nodejs中执行此操作,也不确定这种类型的内容是否在mongoose API中,但我找不到它。 问题答案: 尝试.

  • 在mongodb中,我有一个集合,其中数组有重复的条目,如 我需要删除重复的数组,只保留唯一的数组值,如下所示。 最好的方法是什么 谢啦

  • 问题内容: 我需要从满足条件的数组中删除对象,我可以根据条件更新数组的对象,如下所示: 这正在工作 为了删除我正在这样做 但这不起作用,并给出此错误, ElasticsearchIllegalArgumentException [无法执行脚本]; 嵌套:ConcurrentModificationException; 错误:ElasticsearchIllegalArgumentException

  • 问题内容: 我正在使用Mongoose库通过node.js访问MongoDB 有没有办法 从文档中删除密钥 ?即不只是将值设置为null,而是将其删除? 问题答案: 在早期版本中,您需要删除node-mongodb-native驱动程序。每个模型都有一个收集对象,该对象包含node-mongodb- native提供的所有方法。因此,您可以执行以下操作: 从2.0版开始,您可以执行以下操作: 从2

  • 问题内容: 给定一个n个对象数组,假设它是一个string数组,并且具有以下值: 如何删除/删除数组中所有等于“ a”的字符串/对象? 问题答案: [如果需要一些现成的代码,请滚动到我的“ Edit3”(剪切后)。其余的供后代使用。] 为了充实清洁工的想法: 编辑:我现在使用而不是:单例仅限于一个条目,而该方法允许你添加其他字符串以稍后过滤:。 Edit2:以上方法保留了相同的数组(因此数组的长度