我有3个不同的页面,内容正在从一个集合中加载。内容包含ID,版本和路径。路径是对象的数组,属性“ service”之一将分隔页面的内容,例如,如果“ service”:“ page1”,则将该对象推送到Array,这将加载page1数据,依此类推。 ID和版本保持不变。
这是代码
"_id" : "admin",
"version" : "1.0",
"path" : [
{
"type" : "ABC",
"number" : "1234",
"position" : "ABC",
"service" : "page1"
},
{
"type" : "ABC",
"number" : "2233",
"position" : "ABC",
"service" : "page3"
},
{
"type" : "ABC",
"number" : "12345",
"position" : "ABC",
"service" : "page2"
},
{
"type" : "ABC",
"number" : "2345",
"position" : "ABC",
"service" : "page3",
}
]
}
我能够加载数据,但是在保存日期时面临的问题是,如果我选择在页面1中保存,则将删除页面2和页面3的内容,只有页面1的数据可用,如果在页面2中选择保存,则第1页和第3页的内容将被删除。我需要根据“服务”的值保存数据 //保存数据
this.http.patch(URL + 'document/' + c, { "$set": { path: temp.path } }, this.hdr).toPromise().then(res => {...})
我正在使用angular 6,数据库是MongoDB。请解决此保存问题。
答案 0 :(得分:0)
如果我正确理解,您将检索与某个查询匹配的path元素,这些查询位于一个数组中。 (我从您文献记载不充分的问题中假设是“ temp.path”)。
然后,您将路径更新为该数组,现在不再包含其他页面的对象。
解决方案: 您需要{$ set:{'path':fullPath}} 假设
// the entire path array as present in your collection
fullPath =[{service: "page1", ... }, {service: "page1", ...}, {service: "page2"}...]
temp.path = fullPath.filter(p=>p.service==="page1");
这应该起作用,因为变量是通过引用传递的,并且数组temp.path引用了fullPath的对象。这意味着您对temp.path所做的修改将反映在fullPath
中编辑:这似乎很轻巧,您可以将整个路径获取到客户端,并在进行更改时推动整个路径。 如果不是这样,它将变得更加复杂,您需要为每个更改的成员进行单独的更新操作,并使用$ expr运算符来匹配要尝试修改的路径的数组元素。