Mongoose更新方法不更新记录但不抛出错误

时间:2017-07-12 16:55:11

标签: node.js mongodb mongoose mongodb-query mongoose-schema

这是我的用户模型:

const userSchema = new Schema({
  name: String,
  email: {type: String, unique: true},
  password: String,
  verified: Boolean,
  profile: {
    avatar: String,
    name: String,
    lai: String,
    actions: Number,
    points: Number
  }
}

我正在尝试更新多个用户的个人资料属性,因为您可以看到每个个人资料对用户来说都是唯一的。

const User = require('../models/user');
const mongoose = require('mongoose');

function updateUsers(){
  let array = {};
  User.find({}, function(err, users) {
    users.forEach(function(user) {
      let updated = {
       "avatar" : 
         "",
        "name" : user.name,
        "lai" : "",
        "actions" : 0,
        "points" : 0
    };

    array[user._id] = updated;
 });

  userUpdate(array);
  });
}

所以我能够将_ids和新的配置文件对象保存到数组中。

function userUpdate(array){
  console.log(array);
  for (i in array){
   console.log("id is: " + i);
   console.log(array[i]);
   User.update({_id: i}, {$set: {profile: array[i]}});
   console.log("after call");
  }
}

但上述更新调用不会更新数据库中的用户。它基本上什么都不做,不会抛出任何错误。我尝试将id转换为objectId,将$ set调用更改为其他内容,或者将update更改为findByIdAndUpdate,但没有任何效果。我在这里做错了什么?

编辑:我解决了这个问题。似乎更新调用需要与promises一起使用。我在下面添加了声明并且它正常工作。喔!

User.findByIdAndUpdate({_id: i}, {$set: {profile: array[i]}})
    .then(() => User.findById({_id: i}))
    .catch();

0 个答案:

没有答案