Mongoose选择,填充和保存在Mac和Windows

时间:2017-03-22 18:28:07

标签: mongodb mongoose mongoose-populate

这就是我做的事情

static populateReferralLinks(){
    return Promise.coroutine(function*(){
       let companies = yield Company.find({},'billing referral current_referral_program')
                                        .populate('billing.user','emails name');

       for(let i = 0 ; i < length ; i++){  
         companies[i].referral.is_created = true;
         companies[i].referral.referral_email = companies[i].billing.user.emails[0].email;
         companies[i] = yield companies[i].save();
       }
       return companies;
    }).apply(this)
        .catch((err) => {
            throw err;
        });
}

我有一个功能,其中我只选择了3个字段,例如billing,current_referral_program和referral。 并使用存储在billing.user中的引用填充用户。 现在当我调用此函数然后在线

公司[I] .save();

以下命令显示在windows

中的终端中
Mongoose: companies.update(
{ _id: ObjectId("58d12e1a588a96311075c45c") }, 
{ '$set': 
   { billing: 
      { configured: false, 
        user: ObjectId("58d12e16588a96311075c45a") }, 
     referral: 
     { is_created: true,  
       referral_email: 'jadon.devesh98@gmail.com', 
     }, 
     updatedAt: new Date("Wed, 22 Mar 2017 12:02:55 GMT") 
   } 
}
)

但是在Mac的终端中显示了这个命令

Mongoose: companies.update({ _id: ObjectId("58d12e1a588a96311075c45c") }) { '$set': { billing: { configured: false, user: ObjectId("58d12e16588a96311075c45a") }, current_limit: {}, current_usage: {},referral: { is_created: true, referral_email: 'jadon.devesh98@gmail.com'}}, '$unset': { updatedAt: 1 } }

现在,我还没有提到 current_limit current_usage 是空的。它在Windows上正常运行,但在Mac上设置为 current_limit current_usage 为空,因此在Mac上使用空对象更新我的文档但不在Windows上更新。

它在两个操作系统上应该表现相同但不是。

1 个答案:

答案 0 :(得分:3)

显然,Mongoose 4.5.8中存在此问题,并在最新版本中解决,即4.9.1 Check it here