我有json格式的数据,像这样:
{
{'rank': 1, 'keyword': 'A'}
{'rank': 2, 'keyword': 'B'}
{'rank': 3, 'keyword': 'C'}
}
现在我想将数据存储在MongoDB数据库中,并使数据结构如下:
{
datetime: "2021-01-26T02:35:00+0400",
data: [
{'rank': 1, 'keyword': 'A'}
{'rank': 2, 'keyword': 'B'}
{'rank': 3, 'keyword': 'C'}
]
}
下面是我的代码,但是,它将每个数据块存储在一个对象中。是否可以在嵌套结构中存储数据?
for r in ranks:
rank = r.get("rank")
keyword = r.get("keyword")
result = {"data":[
{
"rank": rank,
"key word": keyword
}]
}
collection.insert_one({"datetime": date_time, "data": result})
- 使用"修改相同的文档
- 使用$push将对象添加到"data"数组
例子:
collection.update( {"datetime": "2021-01-26T02:35:00+0400"} , { $push:{data:{ rank:4 , keyword:"D" }}} )
将给你:
{
"_id" : ObjectId("600f0b64419e1279778fe326"),
"datetime" : "2021-01-26T02:35:00+0400",
"data" : [
{ "rank" : 1, "keyword" : "A" },
{ "rank" : 2, "keyword" : "B" },
{ "rank" : 3, "keyword" : "C" },
{ "rank" : 4, "keyword" : "D" }
]
}
同样在你的python示例中,你似乎在循环后执行单个对象插入操作…,如果你想一个一个地添加,则在循环中添加操作…,但你最好准备好整个数组的对象,并立即插入…
如果文档不存在这样的日期时间,而您想要在新文档中插入数据,则必须在更新操作中添加{upsert:true}…