1

そのため、SQLからMongoへのデータ移行に問題があります。SQLデータベースを取得し、次のような基本的な配列構造を持つ単一のデータ配列にフラット化しました。

[
  {
    'assettype' : 'image',
    'title' : 'Cat',
  },
  {
    'assettype' : 'image',
    'title' : 'Dog',
  },
  {
    'assettype' : 'image',
    'title' : 'Bird',
  }
]

非常にシンプルで、非常に簡単です。配列形式になったら、次のようにmongoインスタンスにインポートしました。

mongoimport -d staging -c assets < library_assets.json --jsonArray

繰り返しますが、非常に簡単です。非常に簡単です。一見すると、すべてが期待どおりに機能しているように見えました。しかし、詳しく調べてみると、アセットコレクション内のすべてのレコードのMongoIdにはダッシュがないことがわかりました。つまり、すべてのmongoIDは次の形式になっています。

51073797074f0d6db8e3149a

予想される形式の代わりに:

c6689c53-a05c-4e94-b503-ac61558cc0c6

MongoIdに依存するクエリを除いて、すべてが機能します。したがって、たとえば、これは機能します。

db.assets.find();

しかし、これはしません:

db.assets.findOne({"_id": 51073797074f0d6db8e3149a });

私はドキュメンテーションとグーリングを注いでいますが、何も見つかりません。誰かが私を正しい方向に向けて、このファイルをインポートして正しいMongoId形式にするのを手伝ってくれるなら、本当に感謝しています!

4

2 に答える 2

3

フィールドにダッシュが表示される理由がわかりません。ダッシュがMongoによって自動生成された場合(つまり、インポートにフィールド_idがなかった場合)、ダッシュはのようになります。したがって、表示されているのは、ユーザー定義フィールドがないインポートが成功した結果である完全に正常な結果です。_id4f5fbb91a717b0f8d080e9d7_id

とはいえ_id、自動生成された場合、はのインスタンスでObjectIdあり、ではありませんString。このクエリは機能します:

db.assets.findOne({"_id": new ObjectId("51073797074f0d6db8e3149a")})

于 2013-01-29T03:14:21.447 に答える
1

したがって、問題を深く掘り下げた後、lobster1234は完全に正しかったことがわかりました。さらに、これはMeteorフレームワークの既知のバグです。

https://github.com/meteor/meteor/issues/61

回避策は、元のデータセットに戻ることでした。このデータセットには、古いシステムのアセットIDがいくつか含まれていました。

[
  {
    'assetid' : '123456789a',
    'assettype' : 'image',
    'title' : 'Cat',
  },
  {
    'assetid' : '123456789b',
    'assettype' : 'image',
    'title' : 'Dog',
  },
  {
    'assetid' : '123456789c',
    'assettype' : 'image',
    'title' : 'Bird',
  }
]

また、「assetid」を「_id」に単純に検索して置換するため、データセットは次のようになります。

[
  {
    '_id' : '123456789a',
    'assettype' : 'image',
    'title' : 'Cat',
  },
  {
    '_id' : '123456789b',
    'assettype' : 'image',
    'title' : 'Dog',
  },
  {
    '_id' : '123456789c',
    'assettype' : 'image',
    'title' : 'Bird',
  }
]

mongoimportを実行した後、MongoDBが一意のObjectIdを生成するのではなく、_idフィールドにデータセットからの文字列が入力されました。

于 2013-01-29T16:05:34.840 に答える