11

私はこのソフトウェアをNodeとMongoDBで開発しており、基本的に次の構造のパッケージのバージョンを保存したいと考えています。

{
    "versions":
    {
        "1.2.3": { stuff }
    }
}

(npmがソファで物事を行う方法と同様)

問題は、MongoDBを更新したときに、キー名にドットが許可されていないことを発見し(ドット表記が存在するため)、コードが失敗することです。これを調査した後、私が見つけたのは、データベースに保存する前にドットを他の文字に変換し、アクセス時に再び変換する必要があるということだけです。これに対処するためのより良い方法は本当にありませんか?

ない場合、データを別のキーにコピーして元のキーを削除せずに、この変換を行うにはどうすればよいですか?

4

2 に答える 2

4

バージョンのコレクションを使用できますか?

好き:

{
    "versions":
    [
              {
                   "version_num": "1.2.3",
                   "stuff": { stuff }
              },
              {
                   "version_num": "1.2.4",
                   "stuff": { stuff }
              }
    ]
}
于 2012-07-19T01:29:00.263 に答える
2

ドット制限は現在ドライバーによって実施されており、すべてのドライバーが最初からフィールド名のドットを防止しているわけではありません。コレクション名に本当に奇妙な文字を使用するなど、Mongoであらゆる種類のクレイジーなことを行うための生のプロトコルコードを書くことができます。

それをクリーンアップすると(おそらくドットを-または他の有効な文字に置き換えて)はるかに良いでしょうが、どんな種類のインテリジェントなフィルタリングでもうまくやるのは難しいでしょう。ほとんどの場合、コレクション全体を反復処理し、アプリの値を変更してから、ドキュメントの「バージョン」フィールド全体を上書きする必要があります。インプレース上書きは、ドキュメントのサイズを変更せず、インデックスを変更しない可能性があるため、かなり高速である必要があります。

于 2012-07-19T01:33:46.010 に答える