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
的插入一条新的数据呢,我并不是要更新数据,用了各种方法都无法实现,求各路高手指点。谢谢。
要在一个现有的 subClassify
数组中添加新对象,可以使用 Mongoose 提供的方法来更新文档。具体来说,你可以使用 findByIdAndUpdate
方法或者直接查询文档然后更新数组。
下面是具体的实现步骤:
- 查找现有文档:首先找到你想要更新的文档。
- 更新数组:使用
$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操作这个请问有链接地址吗,没找到相应的文章,谢谢
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
数组中追加新数据的需求。