Hell devs,这是我的文档架构
var Schema = mongoose.Schema;
var botSchema = new Schema({
Bot_name: String,
UserName:String,
Modules: [{
ModuleStatement: String,
ModuleID: String,
ModuleResponse: [{
Response: String,
TransBotID: String
}]
}]
});
我想要做的是更新ModuleStatement以及将元素推送到ModuleResponse设置Response和TransBotID到某些值
我尝试过关注,但它只更新了ModuleStatement并且没有将元素推送到ModuleResponse
botSchema.update({ 'Modules.ModuleID': req.body.ModId }, { '$set': { 'Modules.$.ModuleStatement': req.body.Statement } }, function (err, data) {
if (err) {
throw err;
} else {
botSchema.update({ "Modules.ModuleID": req.body.ModId }, { "$push": { "ModuleResponse": { "Response": req.body.Statement, "TransBotID": req.body.transitmod } } }, function (err, data) {
if (err) {
throw err;
}
else {
res.json('upgraded');
}
})
}
})
如何在同时设置ModuleStatement的同时将元素推送到ModuleResponse?
答案 0 :(得分:0)
$push
仅适用于$group
阶段。您可能想尝试以下内容:
botSchema.find({'Modules.ModuleID': req.body.ModId}, (err, bots) => {
if (err) {
throw err;
} else {
bots.forEach((bot) => {
bot.modules.forEach((botModule) => {
if (botModule.ModuleID == req.body.ModId) {
botModule.Statement = req.body.Statement;
botModule.ModuleResponse.push({
Response: req.body.Statement,
TransBotID: req.body.transitmod
})
}
});
bot.save((err, data) => {
if (err) throw err;
});
});
res.json('upgraded');
}
})
答案 1 :(得分:0)
这里有一个shell代码:
db.bot.update(
{ "Modules.ModuleID": "<some_id>" },
{
"$set": { "Modules.$.ModuleStatement": "<some_statement>" },
"$push": {
"Modules.$.ModuleResponse": {
"Response" : "<some_response>",
"TransBotID" : "<some_trans_id>"
}
}
}
)
问题是你can在一个更新文档中有多个更新表达式。我相信你可以很容易地把它转换成猫鼬。