我在我的 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”显式使用文档。这种方法有效,但速度很慢。如果我的收藏很小,我相信这无关紧要,但因为它很大(数以百万计的文档)。它可能很慢,因为每次我添加一组字段时都必须移动整个文档。考虑到这一点,我尝试一次性将新字段添加到所有嵌入的文档中。我通过将查找查询留空并从“$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:......
有没有人能够对我做错了什么提供一些见解?甚至有可能做到这一点吗?