当前位置: 首页 > 知识库问答 >
问题:

如何在mongoose中推到数组

邵星光
2023-03-14

我有这样的代码:

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之前等待文件更改...

我怎么解决这个?

共有1个答案

陆宏壮
2023-03-14

首先使用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中间件的一部分,允许在保存数据之前