ホームページ  >  記事  >  バックエンド開発  >  Python+MongoDB の自動インクリメントキー値の簡単な実装

Python+MongoDB の自動インクリメントキー値の簡単な実装

高洛峰
高洛峰オリジナル
2017-02-22 11:05:431756ブラウズ

バックグラウンド

最近、私はバグ記録システムを備えたテストツールボックスを作成しています。バックグラウンドを実装するために Django と MongoDB を使用しているため、自動インクリメントフィールドを実装する方法という問題に遭遇しました。

従来のリレーショナル データベースの実装は非常に簡単で、データを挿入するときに、このキーの値を気にする必要はありません。関数は自動的に実装されますが、非リレーショナル データベースにはこの機能がないようです (または私は知りません)。その後、Baidu はそれらがすべて MongoDB の設定方法であることを発見しましたが、これは私が望んでいたものではありませんでした。

解決策のアイデア

Baiduは良いアイデアを見つけていないので、それ自体で解決することしかできません。私のアイデアは非常に単純です。フィールドは自動的には増加しないので、私は自分で自動増加ソリューションを作成します。

MongoDBの修正メソッドに、int型の自動インクリメントを実現できる$incメソッドがあることがわかりました。それは非常に簡単です。自分でコレクションを作成すると、このコレクションには int フィールドが 1 つだけあり、データを挿入するたびに、このコレクションにアクセスして ID を取得し、$inc メソッドを呼び出して自動的に実行します。増加計画は達成されます。

コード表示

Python は依然として非常に簡単に実装できます。Python と Django は非常に互換性があります。コードは次のとおりです。

def bugPlus(self):
  """
  bugID自增
  :return:True
  """
  db = self.__chooseCollection(config.COLLECTION['bugID'])
  db.update_one({"bugID": self.getBugID()}, {"$inc": {"bugID": 1}})
  return True

各挿入が成功した後、このメソッドを呼び出すことで ID の自動インクリメントを実現できます。

def getBugID(self):
  """
  获取当前bug的最新编号
  :return:None
  """
  db = self.__chooseCollection(config.COLLECTION['bugID'])
  rst = db.find_one()
  return rst['bugID']

挿入する前にこのメソッドを呼び出し、データが挿入されるたびに挿入されるIDが自動インクリメントされるIDになるようにします。

欠点

もちろん、このメソッドにはまだ欠点があります。呼び出し時に使用されるメソッドが増えるため、メソッドが正常に実行されたかどうかを確認する必要があります。そうしないと、次回挿入されるIDはその後のデータではなくなります。自動インクリメント。メソッドが複数回呼び出されるたびに、パフォーマンスが低下します。

その他

もっと良い実装方法があれば、教えてください!

上記の Python+MongoDB の自動インクリメントキー値の簡単な実装は、エディターによって共有されたすべての内容です。参考にしていただければ幸いです。また、PHP 中国語 Web サイトをサポートしていただければ幸いです。

Python+MongoDB の自動インクリメントキー値の簡単な実装に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。