{
"_id": "581dc52e2c26be354164d528",
"name": "vipin",
"__v": 0,
"post": [
{
"like": "today",
"_id": "581dc52e2c26be354164d529",
"comment": [
{
"date": "today",
"username": "vipin",
"_id": "581dc52e2c26be354164d52a",
"detail": [
{
"time": "now",
"day": "saturday",
"_id": "581dc52e2c26be354164d52b"
}
]
}
]
}
]
},
我有一个嵌套的子文档。我想更新注释.date.but我不能这样做。我想嵌套子文档更新,但查询不起作用。
Test.update({"_id":"581dc52e2c26be354164d528","post._id":"581dc52e2c26be354164d529","comment._id":"581dc52e2c26be354164d52a" },{
"$set":{
"post.$.comment.0.date.0":"tommorow"
}
},function(err,data){
if(data){
res.json(data)
};
if(err){
res.json(err)
}
})
}
我的查询现在有效.plzz任何人都建议我。
答案 0 :(得分:1)
mongodb不支持位置运算符匹配嵌套数组。检查此问题它仍然处于打开状态: https://jira.mongodb.org/browse/SERVER-831
解决方法:使用聚合和获取所需的子文档进行修改并使用更新查询更新子文档。
答案 1 :(得分:1)
Okkk.we可以在mongodb中更新我们的嵌套子文档。这是我们的架构。
var Post = new mongoose.Schema({
name:String,
post:[{
like:String,
comment:[{
date:String,
username:String,
detail:{
time:String,
day:String
}
}]
}]
})
现在我们可以在mongoDb中更新我们选择的字段。如果你的文档包含多个字段数组,比如post,comment,那么它可能很差。但是我们可以使用很多对象。比......我们没有更新问题。
post:[{
like:String,
comment:{
date:String,
username:String,
detail:{
time:String,
day:String,
address:{
street:String,
house:String
}
}
}
}]
})
所以我们有第一个Schema的解决方案是这样的。我们的mongoDb查询工作正常。所以检查一下......
对于第一个schema.if我们在子文档中占用了多个数组。
Test.update({ “post._id”: “58206a6aa7b5b99e32b7eb58”}, {$集:{ “$后comment.0.detail.time”: “aajtk”}},
用于第二个模式。如果我们采用的不仅仅是对象。
db.tests.update({ “post._id”:的ObjectId( “58204e89cfee37f023a567bd”)},{$设置:{ “$后comment.detail.time”: “新闻”}})