質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Q&A

1回答

611閲覧

SQL(UPDATE)からMongoDB(update_many)への切り換え

iBETA

総合スコア43

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

0グッド

0クリップ

投稿2020/06/01 23:52

先ずは初心者アピールから...
MongoDB 2〜3日前から始めました超初心者です

今までは、SQLで組んでまして
それをMongoDBに切り換えるのですが
何しろ全然違うのでガチで悩んでます

例えば以下データで以下条件なら
MongoDBだとどう書くのでしょうか
どちら様か御教授いただけませんでしょうか
よろしくお願いいたします(ツッコミ等歓迎!)

DATA

1{ 2 '_id': ObjectId('5ed498ebbc46d0709a01c570'), 3 'name': 'AAA', 4 'age': 55, 5 'status': true, 6 'labels': [ 7 'aaaaa', 8 'bbbbb', 9 'eeeee', 10 ], 11} 12{ 13 '_id': ObjectId('5ed498ebbc46d0709a01c571'), 14 'name': 'BBB', 15 'age': 44, 16 'status': false, 17 'labels': [ 18 'aaaaa', 19 'bbbbb', 20 'ddddd', 21 ], 22} 23{ 24 '_id': ObjectId('5ed498ebbc46d0709a01c572'), 25 'name': 'CCC', 26 'age': 33, 27 'status': true, 28 'labels': [ 29 'aaaaa', 30 'bbbbb', 31 ], 32} 33

条件
update_many(condition, data) を使用
SQL で言う以下にその下に書く以下条件(labels)を追加するのなら
UPDATE collection SET name='ZZZ',age='99' WHERE age IN(33,55) AND status=true
labels 内に、'aaaaa'と'bbbbb'だけが含まれるもの(完全一致)
labels 内に、'aaaaa'や'bbbbb'が含まれるもの(部分一致)

求めている事は
update_many(condition, data) で、以上条件の場合
引数をどう書くべきなのかです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Mongo公式リファレンス - updateMany

公式リファレンスを見てもらうと第一引数のfilterではfindと同じqueryが使えるようなので

mongo

1db.hoge.find({ 2 $and : [ 3 {labels : {$all : ["aaaa"]}}, 4 {labels : {$all : ["bbbb"]}} 5 ] 6});

これで条件指定が可能なはずです。
※実際にupdeteしてみたわけじゃないので間違ってたらすみません。。
ちなみに2行目の$and$orに変更すれば完全と部分を変更できるはずです。

結論こんな具合になるのではないでしょうか

mongo

1update_many({ 2 $and : [ 3 {labels : {$all : ["aaaa"]}}, 4 {labels : {$all : ["bbbb"]}} 5 ] 6}, { 7 $set: { 8 "name" : "hogehoge", 9 "age":99 10 } 11})

そのほかにもオプションがあるっぽいのでリファレンス読んでみてください。

投稿2020/06/03 02:22

編集2020/06/03 02:24
June666

総合スコア290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問