我有一个如下架构:
/**
* Answer Schema
*/
var AnswerSchema = new Schema({
answer: Number,
owner_id: Schema.Types.ObjectId
});
/**
* Poll Schema
*/
var PollSchema = new Schema({
question: { type: String, required: true, trim: true },
choices: [ { type: String, required: true, trim: true} ],
answers: [AnswerSchema]
});
如何为给定的poll_id和回答投票的人的owner_id设置答案?
答案 0 :(得分:0)
术语"设置或创建"有点打开这个。
基本上,您将使用带有.update()
的{{3}}运算符添加(创建)数组中的新项目,或者在拥有当前文档后使用标准JavaScript数组推送在.find()
之后。
但考虑到你可能想要"更新"对于给定所有者的现有答案,那么它可能是两步操作。如果没有,那么你只需要"更新"使用$push
。
PollSchema.update(
{ "_id": poll_id, "answers.owner_id": owner_id }
{ "$set":{ "answers.answer": value } },
function(err,numAffected) {
if (err)
throw err; // or whatever handling
// If this didn't modify anything then $push a document
if ( numAffected != 0 ) {
PollSchema.update(
{ "_id": poll_id },
{ "$push": {
"answers": {
"owner_id": owner_id,
"answer": value
}
}},
function(err, numAffected) {
// more things in here
}
);
}
);
或者,如果你不关心每个人拥有一个以上的答案"然后只使用$push
更新。