Mongoose无法使用位置$运算符进行更新

时间:2015-06-21 10:49:41

标签: node.js mongodb mongoose

我无法使用位置$运算符使用mongoose更新我的文档。这是与此问题密切相关的后续问题: Mongoose update 'cannot use the part (..) to traverse the element

我在这里查看:http://docs.mongodb.org/manual/reference/operator/update/positional/并完全按照他们在示例中所做的那样:

    User.update({'local.email' : user, 'devices.id' : deviceID},
   {$set : {'devices.$.agenda' : agenda}}, function(err, response)
   {
     if(err)
     {
       console.log("Update agenda error", err);
     }
     else {
       console.log("Update agenda OK");
       console.log("Response", response);
     }
   });

但是回复

 Response { ok: 1,
   nModified: 0,
   n: 0,
   lastOp: { _bsontype: 'Timestamp', low_: 2, high_: 1434882344 },
   electionId: 555637ca17aac10c2bbc5d84 }

所以什么都没有被修改。我试图只查询我是否设法找到所请求的ID,即使我使用与插入相同的变量,我也找不到它。

更新 用户架构:

    var userSchema = mongoose.Schema({

    local            : {
        email        : String,
        password     : String,
    },
    devices : [{
      id : String,
      name : String,
      agenda : String
    }]
});

更新#2

进行更新的代码如下:

function updateDeviceList(user, deviceID, deviceName)
{
  User.update({ 'local.email' : user},
  { $push: {'devices' : {'id': deviceID, 'name':deviceName, 'agenda' : ""}}},
  function(err, response)
  {
    if(err)
    {
      console.log("Update device error", err);
    }
    else {
      console.log("Update device OK");
    }
  });
}

function updateAgenda(user, deviceID, agenda)
{
  User.findOneAndUpdate({'local.email' : user, 'devices.id' : deviceID},
  {$set: {"devices.$.agenda" : agenda}},
  {   select: {
            'devices': {
               $elemMatch:
               {   'id' : deviceID }
            }
        }
  },
  function(err, response)
  {
    if(err)
    {
      console.log("Update agenda error", err);
    }
    else {
      console.log("Updated agenda OK");
      console.log("respnse", response);
    }
  });
  console.log("user", user);
  console.log("deviceID", deviceID);
  console.log("agenda", typeof agenda);
}

userdeviceID都是字符串,并且在两个函数中使用的值相同。 Agenda console.log返回string

0 个答案:

没有答案