完全确定答案已经存在,但是我找不到适合我的答案。
我有一些数据需要存储在mongo数据库中,该数据分布在几个文件中,这些文件被一张一张地加载,文件内容如下所示(简化):
文件1:
ID Product.Code Description.Title
ID1 Code1 some text
ID2 Code2 some other text
文件2:
ID Product.Code Description.Title
ID1 Code25 some text
ID2 Code2 some other text
ID3 Code3 yet some other text
以此类推
在循环并添加所有文件后,我想要得到的最终结果如下:
/* first record */
{
"_id" : "ID1",
"Product" : {
"Code" : [
"Code1","Code25"
]
},
"Description" : {
"Title" : "some text",
}
}
/* second record */
{
"_id" : "ID2",
"Product" : {
"Code" : [
"Code2"
]
},
"Description" : {
"Title" : "some other text",
}
}
/* last record */
{
"_id" : "ID3",
"Product" : {
"Code" : [
"Code3"
]
},
"Description" : {
"Title" : "yet some other text",
}
}
因此逻辑如下:
从文件1开始,
-> ID1尚不存在,因此添加。
->与ID2相同
下一步添加文件2,
-> ID1已经存在,但是Product.Code尚不存在,因此将其添加到数组中并保持所有其他内容不变。
-> ID2也存在,但是Product.Code已经在数组中,所以什么也不做。
-> ID3是新的,因此请插入完整的文档数据。
以此类推,直到最后一个文件。
此刻,我预载了所有文件并连接了Product.Codes,以便可以使用update / upsert逻辑将一个文件发送到mongo。到现在为止都可以正常工作,但是由于我拥有大量可用文件,因此对于我的系统而言,它变得越来越繁重,因此,我尝试通过一些“如果新的话,否则添加新的键,如果还不存在,则将键添加到数组”来更改此设置。 / p>
我尝试/失败了$ push(不好,因为它不断不断地添加相同的键),$ addtoset等,但是没有运气。
最大的问题是,我需要在具有所有基本mongo逻辑但没有足够空间容纳高级逻辑的客户端上运行它。理想情况下,尽管我也可以使用try / error选项,但整个流程应该适合单个更新语句。
关于如何最好地解决这一问题的任何建议?
请注意,除了单个ID外,实际数据还包含许多其他属性和复杂性,因此我目前的高查询查询已经相当长了