【发布时间】:2018-11-28 19:04:48
【问题描述】:
我正在尝试向文档添加新字段,但这不起作用:
创建我的 UserModel 原型:
model = require("../models/user")
UserModel.prototype.findOneAndUpdate = function(query, params, cb) {
model.findOneAndUpdate(query, params, { returnNewDocument: true, new: true }, function(err, data) {
if (!err) {
cb(false, data);
} else {
cb(err, false);
}
});
};
然后调用它
userFunc = require("../../model_functions/user")
userFunc.findOneAndUpdate({
"email.value": userEmail
}, {
$set: {"wat":"tf"}
},
function (err, updatedUser) {
//This logs the updated user just fine, but the new field is missing
console.log(updatedUser);
...
});
这会成功更新任何存在的字段,但不会添加任何新字段。
【问题讨论】:
-
架构中添加了新字段?
-
wat是否在用户的架构中定义? Mongoose 旨在强制执行架构,包括丢弃不与其对齐的属性。 -
不,但这不应该是添加它的必要条件,或者至少我是这么认为的。它是一个临时字段。
-
另外,如果我直接在 mongo 控制台中进行操作,它会起作用,它会添加新字段。
-
@LuisEgan 这对猫鼬很重要。 ODM 旨在强制执行您定义的模式,验证每个属性是否属于并丢弃不属于的那些。如果您希望文档是模式和无模式的混合,您可以将属性定义为
Mixedtype,然后可以包含所需的任何种类的信息。否则,如果您不希望像这样强制执行架构,那么 Mongoose 可能不适合您的用例。
标签: javascript node.js mongodb mongoose mongodb-query