我无法使用位置$运算符使用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);
}
user
和deviceID
都是字符串,并且在两个函数中使用的值相同。 Agenda console.log返回string
。