在要插入到mongo db的字典列表中设置唯一字段



我有一个看起来像这样的字典列表;

json_data = [
{
"CODE": "018906",
"X": "29813.66349",
"Y": "28697.520760000003"
},
{
"CODE": "018907",
"X": "30041.8389",
"Y": "28602.98724"
},
{
"CODE": "018910",
"X": "31966.120789999997",
"Y": "29115.75337"
},
]

我试图将json_data插入到mongodb集合mongo_collection中。

mongo_collection.insert_many(json_data)

它运行成功。但是,我希望键字段CODE是唯一的,如果有重复项,插入应该会失败。上面的行将插入每个文档,即使有重复的CODE。如何使CODE密钥唯一?我愿意使用像mongoengine这样的python库。

我希望CODE类似于关系数据库中的主键。

我正在使用python 3.7,mongodb 4.2.7和pymongo。

在插入之前, 您需要在MongoDB中创建一个indexCODE并将字段标记为唯一索引

在 MONGO 中创建索引

db.mongo_collection.createIndex({CODE:1}, {unique:true})

这将确保您在尝试插入已存在的CODE时出现重复键错误。

如果您无法访问MongoDB服务器。

您需要使用与CODE相同的值填充_id。由于_id是 mongo 中的默认主索引。

json_data = [
{
"_id": "018906",
"CODE": "018906",
"X": "29813.66349",
"Y": "28697.520760000003"
},
{
"_id": "018907",
"CODE": "018907",
"X": "30041.8389",
"Y": "28602.98724"
},
{
"_id": "018910",
"CODE": "018910",
"X": "31966.120789999997",
"Y": "29115.75337"
},
]

我想回答我自己的问题,以建立在Anurag Wagh的答案之上,因为他使用的语法不是python。我已将他的答案标记为正确答案。

由于我使用的是pymongo,因此代码的语法应该是;

import pymongo
mongo_collection.create_index([("CODE", pymongo.ASCENDING)], unique=True)

最新更新