我有这样的代码:
router.post('/setsuggestions', function(req, res, next){
if(!req.body.username || !req.body.challengessuggestions){
return res.status(400).json({message: challengessuggestions});
}
var query = { username: req.body.username };
/*User.findOneAndUpdate(query, { challengessuggestions: req.body.challengessuggestions }, callback = function(response){
res.json(response);
});*/
/*
User.findOneAndUpdate(
query,
{$push: {"challengessuggestions": {$oid: req.body.challengessuggestions}}},
callback = function(response) {
res.json(response);
}
);*/
User.findOneAndUpdate(
query,
{$push: {challengessuggestions: req.body.challengessuggestions}},
{safe: true, upsert: true},
function(err, model) {
res.json(err);
}
);
});
当我这样做邮递员的时候:
我得到以下错误:
var UserSchema = new mongoose.Schema({
username: { type: String, lowercase: true, unique: true },
firstname: { type: String},
lastname: { type: String},
difficulty: { type: String},
isstudent: { type: Boolean },
haschildren: { type: Boolean},
gender: { type: String },
email: { type: String, unique: true},
birthdate: String,
isdoingchallenges: { type: Boolean },
challengescompleted: [{ type: ObjectId, ref: 'Challenge' }],
currentchallenge: { type: ObjectId, ref: 'Challenge' },
challengessuggestions: [{ type: ObjectId, ref: 'Challenge' }],
hash: String,
salt: String
});
var Challengeschema = new mongoose.Schema({
name: { type: String, initial: true, required: true, index: true },
image: { type: Array },
difficulty: { type: String },
studentfriendly: { type: Boolean },
childfriendly: { type: Boolean },
description: { type: String }
});
d:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\lib\schema\obj ectid.js:134抛出新的CastError('objectid',value,this.path);^Error at mongooseerror.casterror(d:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\lib\Error\cast.js:18:16)at objectid.cast(d:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\lib\rester\cast.js:134:13)at array.mongoosearray.mixin._cast searray.mixin._mapcast(D:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\lib\types\array.js:295:17)在array.mongoosearray.mixin.push(D:\stijn\documenten\eva-project-groep-6\a pi\node_modules\mongoose\lib\types\array.js:308:25)在查询。(d:\stijn\documenten\eva-project-groep-6\api\routes\ind ex.js:144:44)在d:\stijn\documenten\eva-project-groep-6\api\node_modules\mongoose\node_modules\kareem\index.js:177:19在d:\stijn\document\eva-project-groep-6\api\node_modules\mongoose\node_modules\kareem\index.js:109:16在05:38-[nodemon]应用程序崩溃-在开始NG之前等待文件更改...
我怎么解决这个?
首先使用findone()
查询用户,并使用第一个找到的传递给回调函数的文档保存嵌入的文档:
router.post('/setsuggestions', function(req, res, next){
if(!req.body.username || !req.body.challengessuggestions){
return res.status(400).json({message: challengessuggestions});
}
var query = { username: req.body.username };
User.findOne(query, function (err, user){
if (err) //throw ...
if (user) {
if (user.challengessuggestions && user.challengessuggestions.length) {
user.challengessuggestions.push(req.body.challengessuggestions);
}
else {
user.challengessuggestions = [req.body.challengessuggestions];
}
// save changes
user.save(function (err) {
if (!err) {
// done ...
}
});
}
});
);
问题内容: 我想更新一个数组值,但我不确定要执行的正确方法,因此我尝试了以下方法,但没有为我工作。 我的模型,我模型中的子域 我的查询 谁能给我帮助。谢谢。 问题答案: 你不能同时使用 ,并 在相同的更新表达式作为嵌套的运营商。 使用更新运算符的正确语法如下: 在那里可以来自任何指定的更新列表运营商的位置。 要将一个新元素添加到数组中,只需一个 运算符即可,例如,您可以使用 update方法将修改
我有一个highlight模式为:
问题内容: 假设我有一个名为的模型。我有一个带有对象ID的数组。 我想获取与我拥有的ID数组“相交”的所有用户记录。 问题答案: 您需要使用$ in运算符> https://docs.mongodb.com/manual/reference/operator/query/in/#op._S_in 例如:
本文向大家介绍如何在MongoDB中推送数组?,包括了如何在MongoDB中推送数组?的使用技巧和注意事项,需要的朋友参考一下 要推送数组,请在MongoDB中使用$push。首先让我们创建一个包含文档的集合- 在方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是推送数组的查询- 这将产生以下输出-
问题内容: 假设采用以下架构,我尝试使用Mongoose保存一些GeoJSON数据 这就是我尝试保存文档的方式 但是,我在数据库中得到的是 看起来整个位置标签和数据都丢失了。这是定义架构的错误方法还是保存文档的错误方法? 问题答案: 当使用在嵌入式对象中命名的字段时,您需要使用一个对象来定义其类型,或者Mongoose认为您正在定义对象本身的类型。 因此,将您的架构定义更改为:
问题内容: 我从用户处以字符串格式获取日期,并且当前在创建Schema对象和保存之前在控制器中将其转换为Date。有没有一种方法可以将这种逻辑转换为模型,因为在我看来,模型是正确的选择 目前,我正在这样做 在旁注中,如何断言是否要在自定义函数检查中处理参数。就像是 问题答案: 虽然我不确定的含义,但是我很确定您正在寻找Schema对象函数,该函数是Mongoose中间件的一部分,允许在保存数据之前