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

推入猫鼬数组不是更新数组

有骏奇
2023-03-14
//User Schema
const UserSchema = new mongoose.Schema({
    username: {
        type: String,
        required : true,
    },
    password: {
        type: String,
        required: true
    },
    collections: [{type : mongoose.Schema.Types.ObjectId, ref: 'Collection'}]
}); 

//Collection Schema 
const CollectionSchema = new mongoose.Schema({
    items : [{type : mongoose.Schema.Types.ObjectId, ref: 'Item'}]
}); 

//Item Schema

const ItemSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true
}); 

使用下面的代码,我尝试创建一个新的项模式并将其推入第一个集合对象。我使用findById函数传递要更新的集合对象的_id。找到带有我的id的集合后,我只需将一个项模式推入集合对象的items数组。我得到Res.Status(200),但我的items数组从未更新。还有人有这个问题吗?谢谢你的帮助。

userRouter.post('/addItem', passport.authenticate('jwt', {session: false}), (req, res) => {
    const item = new Item(req.body)

    item.save(err => {
        if(err)
            res.status(500).json({message: {msgBody: "Error has occured", msgError: true }});
        else {
            Collection.findById(req.body.search, function(err, coll){
                coll.items.push(item);
                req.user.save(err => {
                    if(err)
                        res.status(500).json(err)
                    else{
                        res.status(200).json(coll)
                    }
                })
            })
        }
    })
});

共有1个答案

鱼浩荡
2023-03-14

您不使用数据库中新创建的项文档对集合执行任何更新操作。

通过使用$addToset操作符(https://docs.mongodb.com/manual/reference/operator/update/addToset/)将创建的Item文档添加到Collection中的items属性(我建议使用mongoose findByIdAndUpdate方法或updateOne方法)。

使用回调应该是这样的:

Collection.findByIdAndUpdate(req.body.search, { $addToSet: {items: item._id}}, callback);

 类似资料:
  • 我需要将一个数组中的对象推入数据库,但我得到了一个错误。我做错了什么?我发现这样一个话题,通过猫鼬将物品推入mongo数组却无法正确应用.............................................................. 当我尝试这个代码时,我得到了这个答案 MongooseError:文档在保存前必须有_ID

  • 我想在mongo数据库的数组中添加一个元素: 结果很完美: 更新:猫鼬模式:

  • 问题内容: 我一直在寻找答案,但我确信我迷失了正确的词来描述我的追求。 基本上,我有一个名为“ people”的mongodb集合,该集合的架构如下: 现在,我有一个非常基本的express应用程序,该应用程序连接到数据库并成功地使用一个空的friends数组创建了“ people”。 在应用程序的次要位置,有一个添加好友的表单。该表单接受firstName和lastName,然后包含名称字段的P

  • 问题内容: 有没有一种方法可以更新对象中的值? 假设我要为id = 2的项更新名称和值项; 我尝试了以下w /猫鼬: 这种方法的问题在于它会更新/设置整个对象,因此在这种情况下,我会丢失id字段。 猫鼬中是否有更好的方法来设置数组中的某些值,但不理会其他值? 我也只查询了这个人: 问题答案: 你近了 您应该在使用update运算符时使用点符号来做到这一点:

  • 是否有方法更新对象中的值? 假设我想更新id=2的项目的名称和值项目; 我尝试过以下猫鼬: 这种方法的问题在于它更新/设置了整个对象,因此在本例中,我丢失了id字段。 在mongoose中有没有更好的方法来设置数组中的某些值,而不设置其他值? 我也问过只是人:

  • 问题内容: 我已经查看了网站上的一些问题,但还没有弄清楚我在做什么错。我有一些这样的代码: 我不确定在中间应该做什么以使其正确更新数据库。我已经尝试了很多东西,但是无法撤消以找出所有我尝试过的东西。我一整夜都花了时间,我希望它能正常工作。 这几乎是我想要的,我想知道是否有任何方法可以在条件部分 我会继续玩弄它。 问题答案: 这正是我想要的,只有一行。:D完美!