最近アプリの開発を開始し、ついにnode.jsサーバーがmongodbデータベースと通信できるようになりました。
次のようなJSONオブジェクトをたくさん挿入したいと思います。
{
'Username': 'Bob',
'longitude': '58.3',
'latitude': '0.3'
}
このオブジェクトがmyCollectionに挿入された後、ユーザー名Bobを使用してオブジェクトを再度挿入しようとしましたが、座標が異なる場合は、最新の 'Username': 'Bob'オブジェクトを以前のオブジェクトに置き換えます。 myCollectionには、基本的に「ユーザー名」:「ボブ」を持つオブジェクトを1つだけ含めることができます。
これがリレーショナルデータベースの場合、ボブを主キーか何かにしますが、mongoDbでこれを行うための最良の方法は何でしょうか。 update + uploadメソッドを使用する必要がありますか?私はそれを試しましたが、うまくいかなかったようです!
これがばかげた質問のように思われる場合はお詫びしますが、私はまだこれらすべてに慣れていません。
はい、update
オプションを使用した単純な upsert
クエリは、ユースケースを満たす必要があります。
_db.collection.update(
{username:"Bob"},
{$set:{'longitude': '58.3', 'latitude': '0.3'}},
{ upsert: true}
)
_
上記のクエリを初めて実行すると(つまり、Bobがコレクションに存在しない場合)、新しいドキュメントが作成されます。ただし、lat/longの新しい値を使用して2回目に実行すると、既存のドキュメントが新しいlat/long値で更新されます。
username
フィールドに _unique index
_ を作成して、「Bob」の複数のレコードが誤って作成されるのを防ぐこともできます。
_db.collection.ensureIndex( { "username": 1 }, { unique: true } )
_
編集:
db.collection.ensureIndex()
は非推奨になり、db.collection.createIndex()
のエイリアスになりました。したがって、インデックスの作成には db.collection.createIndex()
を使用します