Javascript mongoose更新嵌套文档不工作
我试图找出我做错了什么,因为moongose没有更新我的文档。仅用于测试硬编码的id node.jsJavascript mongoose更新嵌套文档不工作,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我试图找出我做错了什么,因为moongose没有更新我的文档。仅用于测试硬编码的id node.js var id1 = "592fd471fedd311d5c76a024"; var id2 = "592fd4ad608e001d79938ba8"; Workshop.update({ _id: id1, 'themen._id': id2 }, { '$set': { 'themen.$.risikolands
var id1 = "592fd471fedd311d5c76a024";
var id2 = "592fd4ad608e001d79938ba8";
Workshop.update({
_id: id1,
'themen._id': id2
}, {
'$set': {
'themen.$.risikolandschaft': ["John", "Doe"],
}
},
function(err, body) {
if (err) {
console.log(err)
} else {
console.log(body);
}
}
);
这里是我从MongoDB Compass复制的数据
{
"_id" : ObjectId("592fd471fedd311d5c76a024"),
"clientid" : "592cff8794738f0347609666",
"bezeichnung" : "Workshop 1.5.2017 / 10:46",
"themen" : [
{
"thema" : {
"__v" : 0,
"bezeichnung" : "Sturm",
"beschreibung" : "Text",
"_id" : "59255757b1485d0ad2a6924f"
},
"risikolandschaft" : [ "one", "two", "three"],
"date" : "2017-06-01T08:47:41.944Z",
"_id" : ObjectId("592fd4ad608e001d79938ba8")
}
], ...
从尸体上取下原木
{ n: 0, nModified: 0, ok: 1 }
要将新项目添加到“themen”子文档中,我使用以下方法:
var new_thema = {
_id: mongoose.Types.ObjectId(),
date : req.body.date,
risikolandschaft : req.body.risikolandschaft,
thema : req.body.thema };
这里是猫鼬模式
var WorkshopSchema = mongoose.Schema({
clientid: {
type: String,
required: true
},
bezeichnung: {
type: String,
required: true
},
stammdaten : [],
date : Date,
themen : []
});
“themen”没有子模式
“mongoose”:“^4.8.6”显示您的架构和文档的JSON视图。某些内容被错误地设置为字符串,它应该是
ObjectId
值,因此被认为不匹配。从外观上看,您有几个问题。数据路径实际上是themen.thema.\u id
,它实际上是一个“字符串”。我建议你的“猫鼬模式”,我实际上指的是“模式”,你要包括在问题中也是不正确的。这看起来像是从引用的格式迁移过来的,但不正确。好的,还有themen.\u id
。但它看起来也像是模式问题。谢谢,我没有“themen”的子模式,因为我想让它尽可能灵活,我想通过使用“\u id:mongoose.Types.ObjectId()”,可以通过访问它。你可能想打开调试日志mongoose.set(“debug”,true)
。我注意到themen
只定义为一个“数组”,而实际上您并没有为它定义模式类型。我认为(事实上很确定)正因为如此,mongoose在进行查询时将提供的值作为“字符串”保留在themen.\u id
。您可能真的希望将此数组的模式类型形式化,然后将其添加到该声明的themen:[themenSchema]
。然后,ObjectId
值应正确转换。显示您的模式和文档的JSON视图。某些内容被错误地设置为字符串,它应该是ObjectId
值,因此被认为不匹配。从外观上看,您有几个问题。数据路径实际上是themen.thema.\u id
,它实际上是一个“字符串”。我建议你的“猫鼬模式”,我实际上指的是“模式”,你要包括在问题中也是不正确的。这看起来像是从引用的格式迁移过来的,但不正确。好的,还有themen.\u id
。但它看起来也像是模式问题。谢谢,我没有“themen”的子模式,因为我想让它尽可能灵活,我想通过使用“\u id:mongoose.Types.ObjectId()”,可以通过访问它。你可能想打开调试日志mongoose.set(“debug”,true)
。我注意到themen
只定义为一个“数组”,而实际上您并没有为它定义模式类型。我认为(事实上很确定)正因为如此,mongoose在进行查询时将提供的值作为“字符串”保留在themen.\u id
。您可能真的希望将此数组的模式类型形式化,然后将其添加到该声明的themen:[themenSchema]
。然后,ObjectId
值应正确转换。