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

问题描述 投票:0回答:2

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

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。

python python-3.x mongodb pymongo mongoengine
2个回答
1
投票

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

creating index in mongo

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

如果尝试插入已经存在的CODE,这将确保您得到重复的密钥错误。

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

您需要使用与_id相同的值填充CODE。由于_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"
  },
]

0
投票

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

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

import pymongo
mongo_collection.create_index([("CODE", pymongo.ASCENDING)], unique=True)
© www.soinside.com 2019 - 2024. All rights reserved.