我在MongoDB数据库中广泛使用嵌入式文档,并且在尝试添加其他数据时遇到了速度问题:
作为一个例子,我有一个看起来有点像这样的文件:
{
"date" : <<the date>>
"name" : "thisName"
"basket": [
{
"stock": "IBM",
"quantity": 1000.0,
"profit" : 10:0,
},
...
{
"stock": "MSFT",
"quantity": 2000.0,
"profit" : 30:0,
},
]
}
我想要做的是在嵌入式文档中添加5个新字段,如下所示:
{
"date" : <<the date>>
"name" : "thisName"
"basket": [
{
"stock": "IBM",
"quantity": 1000.0,
"profit" : 10:0,
"new_1" : 10:0,
"new_2" : 10:0,
"new_3" : 10:0,
"new_4" : 10:0,
"new_4" : 10:0,
"new_5" : 10:0
},
...
{
"stock": "MSFT",
"quantity": 2000.0,
"profit" : 30:0,
"new_1" : 10:0,
"new_2" : 10:0,
"new_3" : 10:0,
"new_4" : 10:0,
"new_4" : 10:0,
"new_5" : 10:0
},
]
}
我开始在for循环中使用find()。update_one(),明确标识每个嵌入文档并使用“$ set”显式使用文档。这种方法有效,但速度很慢。如果我的收藏很小,我肯定这不重要,但因为它是巨大的(百万的文件中有100个)。它可能很慢,因为每次添加一组字段时都必须移动整个文档。考虑到这一点,我试图一次性将新字段添加到所有嵌入的文档中。我这样做是将查询查询留空并从“$ set”命令中删除位置$。有点像这样(在pymongo):
bulk.find({"date": dates[i],
"strategyId": strategyInfo[siOffset[l]][ID]
}).update({
"$set": {
"basket.new_1": 0.0,
"basket.new_2": 0.0,
"basket.new_3": 0.0,
"basket.new_4": 0.0,
"basket.new_5": 0.0
}
})
这种方法似乎抛出错误cannot use the part (basket of basket.new_5) to traverse the element ({basket:......
是否有人能够对我做错了什么有所了解?甚至可以这样做吗?
答案 0 :(得分:1)
您可以使用这样的递归函数。
首先找到所有要更新的数据
<div class="bannar">
<img class="slides" src="images/bannar1.jpg">
<img class="slides" src="images/bannar2.jpg">
<img class="slides" src="images/bannar3.jpg">
</div