【发布时间】:2015-07-30 17:21:25
【问题描述】:
我正在使用平均堆栈。我对此感到不舒服,并且让自己陷入困境。我已经看到使用 set 或 push 更新记录的示例,但是因为我试图更新 json 对象数组中的 json 对象中的一个 json 对象,所以我遇到了麻烦。
考虑以下架构
token: {
type: String,
required: "FB access token required."
},
fbId: {
type: String,
required: "FB id required.",
unique: true
},
accounts: {
type: Array,
default: []
}
我的帐户数组由 json 对象组成,每个对象如下所示:
{
"name": "some name",
"credentials": {
"username": "some username",
"password": "some password"
}
每次用户添加新帐户时,我都会尝试更新帐户。所以在这种情况下,我可以使用 $push 就好了。但我不想要重复的名称,并且 $push 在这里失败。所以我尝试使用 $set,但 $set 没有将具有新名称的对象插入到帐户中。所以我尝试使用 upsert:true 和 $set,但现在我得到了重复的错误。
这是我尝试在帐户中索引名称的示例。我假设我搞砸了我的查询。
var name = "some name";
var fbId = "some fb Id";
var token = "some token";
var username = "some other username";
var password = "some other password";
var query = {
fbId: fbId,
token: token,
"accounts.name":name
};
var update = {
$set: {
accounts: [{
name: name,
credentials: {
username: username,
password: password
}
}]
}
};
var options = {
upsert: true
};
User.update(query, update, options,
function (err, numberAffected, rawResponse) {
//handle it
});
);
总结一下我的问题,认为我可以通过一个电话更新它是否合理,如果可以,如何更新?还是我应该找到对象,替换它的值,然后将其重新插入数据库?
【问题讨论】:
标签: json node.js mongodb mean-stack