我的收藏品有这样的结构:
{
"_id" : "7ZEc8dkbs4tLwhW24",
"title" : "title",
"json" :
{
\"cells\":[
{
\"type\":\"model\",
\"size\":{\"width\":100,\"height\":40},
\"id\":\"11dc3b6f-2f61-473c-90d7-08f16e7d277a\",
\"attrs\":{
\"text\":{\"text\":\"content\"},
\"a\":{\"xlink:href\":\"http://website.com\",\"xlink:show\":\"replace\",\"cursor\":\"pointer\"}
}
}
]
}
}
现在我需要在我的meteor应用程序中插入/更新字段json.cells.attrs.a
。我得到的所有信息都是_id
(文档ID)和id
(单元格中元素的id)。如果a
不存在,则应创建该元素。
我的尝试不正确,因为查询没有查找elemID来获取cells-array中的正确元素:
var linkObject = {"xlink:href":"http://newURL.com","xlink:show":"replace","cursor":"pointer"};
var docID = '7ZEc8dkbs4tLwhW24';
var elemID = '11dc3b6f-2f61-473c-90d7-08f16e7d277a'; // How to search for this 'id'?
var result = Collection.findOne({ _id: docID });
var json = JSON.parse(result.json);
// find id = elemID in 'json'
// add/update 'a'
// update json in mongoDB document
答案 0 :(得分:1)
在您的代码中,您只是在查询中添加docID
条件。您必须将elemID
添加到查询条件中。然后,您可以使用dot.notation
和$(Positional Operator)
来更新a
对象的attrs
属性。你可以这样做:
Collection.update(
{"_id" : docID , "json.cells.id" : elemID },
{$set: { "json.cells.$.attrs.a" : linkObject}}
}
如果字段不存在, $set
将创建字段。如果您不知道阵列位置,可以使用$ Positional Operator
。