node.js - mongodb 和 mongoose 之间的行为不同?

标签 node.js mongodb mongoose

在 mongo shell 中我可以这样做:

db.getCollection('usercourses').update({
  _id:ObjectId("54bee7c6ababf28b4ea5a07f")},
  {
    $unset:{
      'steps.0.topic':''
    }
  },
{strict:false})

它将从找到的文档中的数组内的对象中删除“主题”字段。

但是当我在 Mongoose 中这样做时:

function() {
    return UserCourses.findQ()
    .then(function(uCourse){
        return Q.all(uCourse.map(worker))
    }).catch(function(error) {
        console.log(error);
    });
}

function worker(uCourse) {
    return Q.all(uCourse.steps.map(
    function(step,i){       
        var field1 = 'steps.'+i+'.topic';

        return UserCourses.updateQ({_id:uCourse._id},
        {
            $unset:{field1:''},
        },
        {strict:false});
    }
))
}

没有任何反应。

为什么?

最佳答案

因为您尝试取消设置名为 field1 的字段(因为 ES5 没有 computed property names ):

$unset : { field1 : '' }

相反,您需要这样做:

var obj = {};
obj['steps.'+i+'.topic'] = '';
...
$unset : obj

关于node.js - mongodb 和 mongoose 之间的行为不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31524788/

相关文章:

node.js - 使用 Mongoose 在对象 ids 数组中查找对象 id 返回空数组

ruby - MongoDB 实例故障测试

javascript - 使用 JWT 测试经过身份验证的路由失败,使用 Mocha + supertest + passport

windows - 空头引用在 NodeGit 中返回

node.js - 使用 mongoosastic 进行自动完成

node.js - 为 vue-cli 运行 "npm run dev"时出现跨环境问题

mongodb - 从 SQL Azure 中获取大行 - 但去哪里?表、Blob 或 MongoDB 之类的东西?

javascript - 提取表单数据并使用 node.js 发送到我的数据库

node.js - 对 mongoose 执行 find() 时找到的每个文档执行回调

javascript - 在 promise 和拒绝中添加回调超时