問題タブ [mongodb-update]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1695 参照

mongodb - Mongodb でサブドキュメントの配列内の要素を更新する方法

Mongo でサブドキュメントの配列内の要素を更新しようとすると、問題が発生します。コレクション「リソース」で次のドキュメントを検討すると

for"item4"のような他の値で更新したい"item5""resource_id" = 2

次のステートメントでエラーが発生しました:配列を含む対応するクエリ フィールドがないと、位置演算子を適用できません

db.resource.update({"resources.resource_id": 2, "resources.resource_list": "item4"}, {$set: {"resources.$.resource_list.$": "item5"}})

これに関するヘルプは大歓迎です。

0 投票する
2 に答える
1005 参照

mongodb - Casbah MongoDB、複数のドキュメントに対して、1 回の操作で配列に値を追加および削除する方法は?

検索した後、1 つのフィールドに対して複数の更新を実行する方法がわかりませんでした。

「タグ」配列フィールドを持つドキュメントがあります。更新を開始する前に、すべてのドキュメントにランダムなタグが付けられます。1 回の操作で、いくつかのタグを追加し、いくつかのタグを削除したいと考えています。

次の更新演算子は、「無効な修飾子が指定されました: $and」というエラーを返します。

How do I both add and remove values to an array in a single operation, to multiple documents?

0 投票する
1 に答える
40 参照

mongodb - MongoDb クエリが更新時に埋め込みドキュメントを挿入するのはなぜですか?

これは私の MongoDB クエリです。

どうやら、「artists.$.soundcloud_toggle」を使用して、artists 配列内のすべてのアーティスト ドキュメントを更新することはできません。

「$ 演算子は、$elemMatch() 演算子で指定された複数のクエリ条件に一致する最初の配列要素を更新できます。http: //docs.mongodb.org/manual/reference/operator/update/positional/

クエリに一致するすべてのイベントですべてのアーティストの soundcloud_toggle プロパティを設定するために、配列のインデックスを変更してクエリを何度も実行できてうれしいです。

問題は、たとえば、アーティスト配列にアーティスト ドキュメントが 1 つしかない場合、"artists.1.soundcloud_toggle" でクエリを実行すると、単一のプロパティを持つアーティスト ドキュメントがアーティスト配列に挿入されます。

(私は "upsert:false" を宣言しましたが、これはデフォルトで false になっているはずです)

既存のドキュメントがない場合に、クエリがドキュメントを挿入して soundcloud_toggle:false を設定しないようにするにはどうすればよいですか? 指定されたアーティスト配列インデックスにアーティストが存在する場合にのみ、プロパティを更新したいと考えています。

0 投票する
2 に答える
8394 参照

node.js - Upsert を true として Update を使用しているときにデフォルト値が設定されない

ユーザー用に次のモデルがあります。

ご覧のとおり、'created' フィールドは現在の日付のデフォルト値を取得するため、新しいユーザーが作成されると自動的に設定されます。

ユーザーの詳細を投稿するときは、次のクエリを使用します。

findOneAndUpdatewithを使用する目的はupsert: true、既存のプロファイルを返すか、新しいプロファイルを作成することです。また、投稿されたデータに基づいてフィールドを更新します。

ただし、created作成されたフィールドが投稿されていなくても、フィールドは毎回現在の日付で更新されます。このフィールドが一度だけ設定されるようにするにはどうすればよいですか?

編集

データベースからのオブジェクトの例:

createdアップサートを使用して新しいオブジェクトを作成している間でも、フィールドが設定されていないことがわかりました。ドキュメントに存在しない場合でも、Mongoose はスキーマに基づいて現在の日付を返すだけです。

upsertしたがって、問題は次のようになります: usingが引数で指定されていないフィールドのデフォルト値を作成することを確認するにはどうすればよいですか?

0 投票する
1 に答える
5687 参照

mongodb - mongodb の更新に一致するドキュメントの失敗

mongoimport による 10000 個のドキュメント インポートがあり、_id は長さ 6 のランダムな文字列です。

mongoimport はデータ型を指定できないため、"123456" のような文字列は int 型としてインポートされました。だから私は手動でオリジナルを削除し、それらを次のように再挿入します

0 のデフォルトの型は Double であるため、次のように int に変更します。

6 つのドキュメントの変更に失敗したようです。次の方法で変更を検証します。

更新は、mongoimport によってインポートされたドキュメントのみを変更しますが、手動で挿入したドキュメントはそのままにします。なぜですか?

0 投票する
2 に答える
3420 参照

mongodb - コレクション内の現在のドキュメントに新しいフィールドを追加すると、Meteor.users.update アクセスが拒否される

現在のドキュメントに新しいフィールド (将来的に $push が入力される配列) を追加しようとしていますが、エラーが発生していますupdate failed: MongoError: Cannot apply $push/$pushAll modifier to non-array

Meteor.users コレクションに取り組んでいます。

実行されたコードは次のとおりです。