我有一个模型userDatas,它包含一个用户数据列表。
[{
"_id" : ObjectId("5bb6730721f28a295436b36f"),
"userId" : "5bb6730721f28a295436b36e",
"reputationNumber" : 0,
"questions" : [],
"answers" : []
},
{
"_id" : ObjectId("5bb6738c21f28a295436b371"),
"userId" : "5bb6738c21f28a295436b370",
"reputationNumber" : 0,
"questions" : [],
"answers" : []
}]
我想按userId过滤,然后将“ 5bb7d72af050ca0910282ff4”字符串添加到问题数组。如何做到这一点?
//Userdatas.find
答案 0 :(得分:3)
由于您使用的是猫鼬,因此可以使用findOneAndUpdate和addToSet来实现:
Database error 0x80040E14: Syntax error in FROM clause.
; The query: SELECT TOP 1 * FROM ( ALTER TABLE [Date E$]
ADD [Type] string NOT NULL DEFAULT "P1" ) [TableauSQL]
答案 1 :(得分:1)
查询看起来像
Userdatas.findOne({where: {userId: "5bb7d72af050ca0910282ff4"}}, function (err, data) {
if (!err && data) {
var questionsArr = [];
if (data.questions) {
questionsArr = data.questions;
}
questionsArr.push('5bb7d72af050ca0910282ff4');
data.updateAttributes({questions: questionsArr}, function(err, updateData) {
cb (err, updateData);
});
} else {
cb (err, {});
}
});
不幸的是,您需要2个查询才能执行此操作。首先,获取用户ID与所需的用户ID匹配的文档,并将字符串推送到问题数组并更新文档。
编辑: 第一个findOne查询获取userId与我们的用户匹配的文档。在已获取的文档上执行updateAttributes查询,因此它会更新正确的文档。