Nodejs Mongoose 操作数据库问题请教,高手请进。

Nodejs Mongoose 操作数据库问题请教,高手请进。

数据中定义的类型如下:

var classSchema = new mongoose.Schema({
	classify : {
		type: String,
		required : true
	},
	subClassify :[
		{
			test1 : String,
			test2 : String
		},
	]
},{safe:true});
var classModel = db.model('subClass',classSchema);
var parent = new classModel({
	classify: 'JS开发',
	subClassify :[
		{
			test1 : "abc",
			test2 : "bdc"
		},
	]
});
//存入数据库
parent.save(function(err,data){
	console.log(data);
})

操作后数据库正常存入数据显示如下:

/* 0 */
{
  "classify" : "JS开发",
  "_id" : ObjectId("534953412742011430c8b7a4"),
  "subClassify" : [
{
      "test1" : "123",
      "test2" : "456",
      "_id" : ObjectId("534953412742011430c8b7a5")
}
],
  "__v" : 0
}

现在我的问题是我想操作上面这个条数据,我现在想在 subClassify 这个字段下面增加一条数据,最后数据结果如下:

/* 0 */
{
  "classify" : "JS开发",
  "_id" : ObjectId("534953412742011430c8b7a4"),
  "subClassify" : [
{
      "test1" : "123",
      "test2" : "456",
      "_id" : ObjectId("534953412742011430c8b7a5")
},
{
      "test1" : "abc",
      "test2" : "def",
      "_id" : ObjectId("534953412742011430c8b7a6")
}
],
  "__v" : 0
}

我要怎么在 JS 开发这条字段下的 subClassify 的插入一条新的数据呢,我并不是要更新数据,用了各种方法都无法实现,求各路高手指点。谢谢。


7 回复

要在一个现有的 subClassify 数组中添加新对象,可以使用 Mongoose 提供的方法来更新文档。具体来说,你可以使用 findByIdAndUpdate 方法或者直接查询文档然后更新数组。

下面是具体的实现步骤:

  1. 查找现有文档:首先找到你想要更新的文档。
  2. 更新数组:使用 $push 操作符将新对象添加到 subClassify 数组中。

示例代码

const mongoose = require('mongoose');
const db = mongoose.connection;

// 定义模式
var classSchema = new mongoose.Schema({
    classify: {
        type: String,
        required: true
    },
    subClassify: [
        {
            test1: String,
            test2: String
        }
    ]
}, { safe: true });

// 创建模型
var classModel = db.model('subClass', classSchema);

// 增加新对象到 subClassify 数组
async function addSubClass() {
    try {
        // 查找文档
        const parent = await classModel.findById('534953412742011430c8b7a4');
        
        if (!parent) {
            console.log('Document not found.');
            return;
        }

        // 使用 $push 操作符添加新对象
        const updatedParent = await classModel.findByIdAndUpdate(
            '534953412742011430c8b7a4',
            { $push: { subClassify: { test1: "abc", test2: "def" } } },
            { new: true } // 返回更新后的文档
        );

        console.log(updatedParent);
    } catch (err) {
        console.error('Error:', err);
    }
}

addSubClass();

解释

  • 查找文档:我们使用 findById 方法来查找特定 _id 的文档。
  • 更新数组:使用 findByIdAndUpdate 方法,并通过 $push 操作符将新对象添加到 subClassify 数组中。
  • 返回更新后的文档:设置 { new: true } 参数,确保返回的是更新后的文档。

这样,你就可以在现有的 subClassify 数组中添加一个新的对象,而不需要替换整个数组。希望这能解决你的问题!


find 然后 push 再 save

或者看看文档用subdocument操作

解决了,感谢。用Push再存,是个好方法,但是你后面说的subdocument操作这个请问有链接地址吗,没找到相应的文章,谢谢

为什么我回复总是 forbidden…能不能不要让人这么崩溃。

good,非常感谢, forbidden确实蛋疼

要在 subClassify 字段下新增一条数据,可以使用 Mongoose 的 update 方法,并指定 $push 操作来添加新数据。以下是一个具体的示例代码:

const mongoose = require('mongoose');
const db = mongoose.connection;

// 定义 schema 和 model
var classSchema = new mongoose.Schema({
    classify: { type: String, required: true },
    subClassify: [{
        test1: String,
        test2: String
    }]
}, { safe: true });

var classModel = db.model('subClass', classSchema);

// 新增的数据
let newData = {
    test1: "abc",
    test2: "def"
};

// 更新数据库中的记录
classModel.update(
    { classify: "JS开发" }, // 查询条件
    { $push: { subClassify: newData } }, // 更新操作
    function(err, result) {
        if (err) {
            console.error(err);
        } else {
            console.log(result);
        }
    }
);

这段代码首先定义了 Mongoose 的 schema 和 model,然后通过 update 方法查询符合条件的记录,并使用 $push 操作将新的 subClassify 数据添加到现有的数组中。这样就能实现你在 subClassify 数组中追加新数据的需求。

回到顶部