Docs Menu
Docs Home
/
ガイドを利用する

演算子と複合クエリを使用したデータの読み取り

前の読み取りガイド「 クエリを使用して MongoDB から MongoDB からデータを読み取り 」では、等価クエリを使用してデータを読み取ります。 このガイドでは、次の操作を行います。

  • MongoDB の比較演算子を使用して、 sample_guides.planetsコレクションからデータを読み取ります。

  • クエリ条件を組み合わせて複合クエリを作成します。

  • 埋め込みフィールドをクエリするには、ドット表記を使用します。

所要時間: 20 分

このチュートリアルでは、比較演算子を使用してデータを読み取ります。

1

Tip

以下は、MongoDB に接続するために最低限必要なコードの概要です。次の数ステップで、データを読み込むための追加を行います。

5 行目で、URI 文字列を独自の Atlas 接続文字列に置き換えます。

CrudRead.cs
1using MongoDB.Bson;
2using MongoDB.Driver;
3
4// Replace the uri string with your MongoDB deployment's connection string.
5var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7var client = new MongoClient(uri);
8
9var coll = client.GetDatabase("sample_guides").GetCollection<BsonDocument>("planets");
10// find code goes here
11var cursor = coll.AsQueryable();
12
13foreach (var document in cursor)
14{
15 Console.WriteLine(document);
16}

Tip

以下は、MongoDB に接続するために最低限必要なコードの概要です。次の数ステップで、データを読み込むための追加を行います。

13 行目の URI 文字列を独自の Atlas 接続文字列に置き換えます。

crudRead.go
1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 uri := "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
14
15 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
16 if err != nil {
17 panic(err)
18 }
19
20 defer func() {
21 if err = client.Disconnect(context.TODO()); err != nil {
22 panic(err)
23 }
24 }()
25 coll := client.Database("sample_guides").Collection("planets")
26
27 // find code goes here
28 filter := bson.D{{}}
29 cursor, err := coll.Find(context.TODO(), filter)
30 if err != nil {
31 panic(err)
32 }
33
34 for cursor.Next(context.TODO()) {
35 var result bson.M
36 if err := cursor.Decode(&result); err != nil {
37 panic(err)
38 }
39 fmt.Println(result)
40 }
41 if err := cursor.Err(); err != nil {
42 panic(err)
43 }
44}

Tip

以下は、MongoDB に接続するために最低限必要なコードの概要です。次の数ステップで、データを読み込むための追加を行います。

8 行目の URI 文字列を独自の Atlas 接続文字列に置き換えます。

CrudRead.java
1import com.mongodb.client.*;
2import com.mongodb.client.model.Filters.*;
3import org.bson.Document;
4import org.bson.conversions.Bson;
5
6public class CrudRead {
7 public static void main(String[] args) {
8 String uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
9
10 try (MongoClient mongoClient = MongoClients.create(uri)) {
11 MongoCollection<Document> coll = mongoClient.getDatabase("sample_guides")
12 .getCollection("planets");
13 // find code goes here
14 Bson filter = Filters.empty();
15 MongoCursor<Document> cursor = coll.find(filter).iterator();
16 try {
17 while (cursor.hasNext()) {
18 System.out.println(cursor.next().toJson());
19 }
20 } finally {
21 cursor.close();
22 }
23 }
24 }
25}

Tip

以下は、MongoDB に接続するために最低限必要なコードの概要です。次の数ステップで、データを読み込むための追加を行います。

4 行目で、URI 文字列を独自の Atlas 接続文字列に置き換えます。

crud-read.js
1const { MongoClient } = require("mongodb");
2// Replace the uri string with your MongoDB deployment's connection string.
3const uri =
4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
5const client = new MongoClient(uri);
6async function run() {
7 try {
8 await client.connect();
9 const coll = client.db("sample_guides").collection("planets");
10
11 // find code goes here
12 let cursor = coll.find();
13
14 await cursor.forEach(console.log);
15 } finally {
16 // Ensures that the client will close when you finish/error
17 await client.close();
18 }
19}
20run().catch(console.dir);

Tip

以下は、MongoDB に接続するために最低限必要なコードの概要です。次の数ステップで、データを読み込むための追加を行います。

4 行目で、URI 文字列を独自の Atlas 接続文字列に置き換えます。

CRUD_read.py
1from pymongo import MongoClient
2
3# Replace the uri string with your MongoDB deployment's connection string.
4uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
5
6client = MongoClient(uri)
7coll = client.sample_guides.planets
8
9# find code goes here
10cursor = coll.find()
11
12for doc in cursor:
13 print(doc)
14
15# Close the connection to MongoDB when you're done.
16client.close()

Tip

mongodb+srv

srvオプションを選択した状態で、PyMongo をインストールしておきます。

python3 -m pip install "pymongo[srv]"
2

このクエリでドット表記を使用して、埋め込みドキュメントsurfaceTemperatureCmeanフィールドの値が15度(摂氏)より小さいドキュメントを選択します。

CrudRead.cs
// find code goes here
var cursor = from planet in coll.AsQueryable()
where planet["surfaceTemperatureC.mean"] < 15
select planet;
crudRead.go
1// find code goes here
2filter := bson.D{{"surfaceTemperatureC.mean", bson.D{{"$lt", 15}}}}
3cursor, err := coll.Find(context.TODO(), filter)
4if err != nil {
5 panic(err)
6}

MongoDB Java ドライバーには、クエリ(およびその他の操作)の作成プロセスを簡素化するビルダが含まれます。ここでは、 Filters.lt ビルダを使用してクエリ ドキュメントを構築します。

CrudRead.java
1// find code goes here
2Bson filter = lt("surfaceTemperatureC.mean", 15);
3MongoCursor<Document> cursor = coll.find(filter).iterator();
crud-read.js
// find code goes here
const cursor = coll.find({ "surfaceTemperatureC.mean": { $lt: 15 } });
CRUD_read.py
# find code goes here
cursor = coll.find({"surfaceTemperatureC.mean": {"$lt": 15}})
3

完全なコードとサンプル出力は次のとおりです。 表示の都合上、結果は切り捨てられています。

CrudRead.cs
1using MongoDB.Bson;
2using MongoDB.Driver;
3
4// Replace the uri string with your MongoDB deployment's connection string.
5var uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
6
7var client = new MongoClient(uri);
8
9var coll = client.GetDatabase("sample_guides").GetCollection<BsonDocument>("planets");
10// find code goes here
11var cursor = from planet in coll.AsQueryable()
12 where planet["surfaceTemperatureC.mean"] < 15
13 select planet;
14
15foreach (var document in cursor)
16{
17 Console.WriteLine(document);
18}
{ "name" : "Uranus", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -197.19999999999999 }, ... }
{ "name" : "Mars", "surfaceTemperatureC" : { "min" : -143, "max" : 35, "mean" : -63 }, ... }
{ "name" : "Neptune", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -201 }, ... }
{ "name" : "Jupiter", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -145.15000000000001 }, ... }
{ "name" : "Earth", "surfaceTemperatureC" : { "min" : -89.200000000000003, "max" : 56.700000000000003, "mean" : 14 }, ... }
{ "name" : "Saturn", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -139.15000000000001 }, ... }
crudRead.go
1package main
2
3import (
4 "context"
5 "fmt"
6
7 "go.mongodb.org/mongo-driver/bson"
8 "go.mongodb.org/mongo-driver/mongo"
9 "go.mongodb.org/mongo-driver/mongo/options"
10)
11
12func main() {
13 uri := "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
14
15 client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
16 if err != nil {
17 panic(err)
18 }
19
20 defer func() {
21 if err = client.Disconnect(context.TODO()); err != nil {
22 panic(err)
23 }
24 }()
25 coll := client.Database("sample_guides").Collection("planets")
26
27 // find code goes here
28 filter := bson.D{{"surfaceTemperatureC.mean", bson.D{{"$lt", 15}}}}
29 cursor, err := coll.Find(context.TODO(), filter)
30 if err != nil {
31 panic(err)
32 }
33
34 for cursor.Next(context.TODO()) {
35 var result bson.M
36 if err := cursor.Decode(&result); err != nil {
37 panic(err)
38 }
39 fmt.Println(result)
40 }
41 if err := cursor.Err(); err != nil {
42 panic(err)
43 }
44}
map[ name:Uranus surfaceTemperatureC:map[max:<nil> mean:-197.2 min:<nil>] ...]
map[ name:Mars surfaceTemperatureC:map[max:35 mean:-63 min:-143] ... ]
map[ name:Neptune surfaceTemperatureC:map[max:<nil> mean:-201 min:<nil>] ... ]
map[ name:Jupiter surfaceTemperatureC:map[max:<nil> mean:-145.15 min:<nil>] ... ]
map[ name:Earth surfaceTemperatureC:map[max:56.7 mean:14 min:-89.2]]
map[ name:Saturn surfaceTemperatureC:map[max:<nil> mean:-139.15 min:<nil>] ... ]
CrudRead.java
1import com.mongodb.client.*;
2import com.mongodb.client.model.Filters.*;
3import org.bson.Document;
4import org.bson.conversions.Bson;
5
6public class CrudRead {
7 public static void main(String[] args) {
8 String uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
9
10 try (MongoClient mongoClient = MongoClients.create(uri)) {
11 MongoCollection<Document> coll = mongoClient.getDatabase("sample_guides")
12 .getCollection("planets");
13
14 // find code goes here
15 Bson filter = lt("surfaceTemperatureC.mean", 15);
16 MongoCursor<Document> cursor = coll.find(filter).iterator();
17
18 // iterate code goes here
19 try {
20 while (cursor.hasNext()) {
21 System.out.println(cursor.next().toJson());
22 }
23 } finally {
24 cursor.close();
25 }
26 }
27 }
28}
{ "name" : "Uranus", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -197.19999999999999 }, ... }
{ "name" : "Mars", "surfaceTemperatureC" : { "min" : -143, "max" : 35, "mean" : -63 }, ... }
{ "name" : "Neptune", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -201 }, ... }
{ "name" : "Jupiter", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -145.15000000000001 }, ... }
{ "name" : "Earth", "surfaceTemperatureC" : { "min" : -89.200000000000003, "max" : 56.700000000000003, "mean" : 14 }, ... }
{ "name" : "Saturn", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -139.15000000000001 }, ... }
crud-read.js
1const { MongoClient } = require("mongodb");
2// Replace the uri string with your MongoDB deployment's connection string.
3const uri =
4 "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority";
5const client = new MongoClient(uri);
6async function run() {
7 try {
8 await client.connect();
9 const coll = client.db("sample_guides").collection("planets");
10
11 // find code goes here
12 const cursor = coll.find({ "surfaceTemperatureC.mean": { $lt: 15 } });
13
14 await cursor.forEach(console.log);
15 } finally {
16 // Ensures that the client will close when you finish/error
17 await client.close();
18 }
19}
20run().catch(console.dir);
{ "name" : "Uranus", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -197.19999999999999 }, ... }
{ "name" : "Mars", "surfaceTemperatureC" : { "min" : -143, "max" : 35, "mean" : -63 }, ... }
{ "name" : "Neptune", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -201 }, ... }
{ "name" : "Jupiter", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -145.15000000000001 }, ... }
{ "name" : "Earth", "surfaceTemperatureC" : { "min" : -89.200000000000003, "max" : 56.700000000000003, "mean" : 14 }, ... }
{ "name" : "Saturn", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -139.15000000000001 }, ... }
CRUD_read.py
1from pymongo import MongoClient
2
3# Replace the uri string with your MongoDB deployment's connection string.
4uri = "mongodb+srv://<user>:<password>@<cluster-url>?retryWrites=true&writeConcern=majority"
5
6client = MongoClient(uri)
7coll = client.sample_guides.planets
8
9# find code goes here
10cursor = coll.find({"surfaceTemperatureC.mean": {"$lt": 15}})
11
12for doc in cursor:
13 print(doc)
14
15# Close the connection to MongoDB when you're done.
16client.close()
{ "name" : "Uranus", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -197.19999999999999 }, ... }
{ "name" : "Mars", "surfaceTemperatureC" : { "min" : -143, "max" : 35, "mean" : -63 }, ... }
{ "name" : "Neptune", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -201 }, ... }
{ "name" : "Jupiter", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -145.15000000000001 }, ... }
{ "name" : "Earth", "surfaceTemperatureC" : { "min" : -89.200000000000003, "max" : 56.700000000000003, "mean" : 14 }, ... }
{ "name" : "Saturn", "surfaceTemperatureC" : { "min" : null, "max" : null, "mean" : -139.15000000000001 }, ... }

ここで、AND ロジックと OR ロジックを使用して複合クエリを作成し、MongoDB からデータを読み取ります。

1

MongoDB ですべてのクエリ述語(論理 AND)に一致する複合クエリを作成するには、検索ドキュメントで一致させるすべてのフィールドを指定します。 デフォルトでは、MongoDB はすべての フィールドに一致します。 前のガイドに従った場合は、これはすでに完了しています。

次の例では、 planetsコレクション内で、 surfaceTemperatureC.meanフィールドが15より小さく、かつsurfaceTemperatureC.minフィールドが-100より大きいすべてのドキュメントを検索します。

CrudRead.cs
1// find code goes here
2var cursor = from planet in coll.AsQueryable()
3 where planet["surfaceTemperatureC.mean"] < 15 && planet["surfaceTemperatureC.min"] > -100
4 select planet;
5
{'name': 'Earth', 'orderFromSun': 3, ...}
crudRead.go
1// find code goes here
2filter := bson.D{
3 {"$and",
4 bson.A{
5 bson.D{{"surfaceTemperatureC.mean",
6 bson.D{{"$lt", 15}},
7 }},
8 bson.D{{"surfaceTemperatureC.min",
9 bson.D{{"$gt", -100}},
10 }},
11 },
12 },
13}
14cursor, err := coll.Find(context.TODO(), filter)
15if err != nil {
16 panic(err)
17}
map[name:Earth orderFromSun:3 ...]
CrudRead.java
1// find code goes here
2Bson filter = and(lt("surfaceTemperatureC.mean", 15), gt("surfaceTemperatureC.min", -100));
3MongoCursor<Document> cursor = coll.find(filter).iterator();
{'name': 'Earth', 'orderFromSun': 3, ...}
crud-read.js
1// find code goes here
2const cursor = coll.find({
3 "surfaceTemperatureC.mean": { $lt: 15 },
4 "surfaceTemperatureC.min": { $gt: -100 },
5});
{'name': 'Earth', 'orderFromSun': 3, ...}

注意

暗黙的な AND

複数の条件を指定することが一般的です。 クエリ演算子を指定しない場合、ドライバーは条件を AND 形式で解釈します。 ただし、複数の条件を指定する際、特に同じフィールドに条件を指定する場合は を明示的に指定する必要がある場合があります。

たとえば、 planetsコレクション内のドキュメントのうち、 orderFromSun値が2より大きく、かつ5より小さいドキュメントを検索するには、 $andクエリ演算子を使用する必要があります。

crud-read.js
1const cursor = coll.find({
2 $and: [{ orderFromSun: { $gt: 2 } }, { orderFromSun: { $lt: 5 } }],
3});
{'name': 'Mars', 'orderFromSun': 4, ... }
{'name': 'Earth', 'orderFromSun': 3, ... }
CRUD_read.py
1cursor = coll.find(
2 {"$and": [{"orderFromSun": {"$gt": 2}}, {"orderFromSun": {"$lt": 5}}]}
3)
{'name': 'Mars', 'orderFromSun': 4, ... }
{'name': 'Earth', 'orderFromSun': 3, ... }

$and演算子を使用しない場合、ドライバーはクエリフィルター内で同じキーを複数回検出し、最後に検出されたキーを使用します。 $and演算子を省略してみてください。

CRUD_read.py
1# find code goes here
2cursor = coll.find(
3 {"surfaceTemperatureC.mean": {"$lt": 15}, "surfaceTemperatureC.min": {"$gt": -100}}
4)
{'name': 'Earth', 'orderFromSun': 3, ...}

注意

暗黙的な AND

複数の条件を指定することが一般的です。 クエリ演算子を指定しない場合、ドライバーは条件を AND 形式で解釈します。 ただし、複数の条件を指定する際、特に同じフィールドに条件を指定する場合は を明示的に指定する必要がある場合があります。

たとえば、 planetsコレクション内のドキュメントのうち、 orderFromSun値が2より大きく、かつ5より小さいドキュメントを検索するには、 $andクエリ演算子を使用する必要があります。

crud-read.js
1const cursor = coll.find({
2 $and: [{ orderFromSun: { $gt: 2 } }, { orderFromSun: { $lt: 5 } }],
3});
{'name': 'Mars', 'orderFromSun': 4, ... }
{'name': 'Earth', 'orderFromSun': 3, ... }
CRUD_read.py
1cursor = coll.find(
2 {"$and": [{"orderFromSun": {"$gt": 2}}, {"orderFromSun": {"$lt": 5}}]}
3)
{'name': 'Mars', 'orderFromSun': 4, ... }
{'name': 'Earth', 'orderFromSun': 3, ... }

$and演算子を使用しない場合、ドライバーはクエリフィルター内で同じキーを複数回検出し、最後に検出されたキーを使用します。 $and演算子を省略してみてください。

2

相互に排他的な条件を指定する場合は、OR クエリが必要です。 たとえば、 planetsコレクション内で、 orderFromSunの値が7より大きく、かつ2より小さいドキュメントは一致させません。

次の例は、$or 演算子を使用して相互に排他的な条件をExpressする方法を示しています。

CrudRead.cs
1// find code goes here
2var cursor = from planet in coll.AsQueryable()
3 where planet["orderFromSun"] > 7 || planet["orderFromSun"] < 2
4 select planet;
{ name: 'Mercury', orderFromSun: 1, ... }
{ name: 'Neptune', orderFromSun: 8, ... }
crudRead.go
1// find code goes here
2filter := bson.D{
3 {"$or",
4 bson.A{
5 bson.D{{"orderFromSun",
6 bson.D{{"$gt", 7}},
7 }},
8 bson.D{{"orderFromSun", bson.D{{"$lt", 2}}}},
9 },
10 },
11}
12
13cursor, err := coll.Find(context.TODO(), filter)
14if err != nil {
15 panic(err)
16}
map[name:Mercury orderFromSun:1 ...]
map[name:Neptune orderFromSun:8 ...]
CrudRead.java
1// find code goes here
2Bson filter = or(gt("orderFromSun", 7), lt("orderFromSun", 2));
3MongoCursor<Document> cursor = coll.find(filter).iterator();
{ name: 'Mercury', orderFromSun: 1, ... }
{ name: 'Neptune', orderFromSun: 8, ... }
crud-read.js
1// find code goes here
2const cursor = coll.find({
3 $or: [{ orderFromSun: { $gt: 7 } }, { orderFromSun: { $lt: 2 } }],
4});
{ name: 'Mercury', orderFromSun: 1, ... }
{ name: 'Neptune', orderFromSun: 8, ... }
CRUD_read.py
1# find code goes here
2cursor = coll.find(
3 {
4 "$or": [
5 {"orderFromSun": {"$gt": 7}},
6 {"orderFromSun": {"$lt": 2}},
7 ]
8 }
9)
{ name: 'Mercury', orderFromSun: 1, ... }
{ name: 'Neptune', orderFromSun: 8, ... }

このガイドを正常に完了すると、MongoDB クエリ演算子と複合クエリを使用して MongoDB からデータを読み込んだことになります。

クエリ演算子を組み合わせて複雑なクエリをExpressできます。 たとえば、円 と 環境内の特定の化複合ドキュメント、または特定の温度である、 かつ 、すべての名前に文字「E」が含まれるドキュメントをクエリできます。

次のガイドでは、MongoDB にデータを 挿入 する方法を学習します。

次のステップ
MongoDB へのデータの挿入
15 分

ドキュメントを作成して MongoDB に挿入します。

スタート ガイド
第 2 章
CRUD
  • MongoDB ドライバーの追加
  • MongoDB でのデータの読み取り
  • クエリを使用した MongoDB からのデータの読み取り
  • 演算子と複合クエリを使用したデータの読み取り
  • MongoDB へのデータの挿入
  • MongoDB でのデータのアップデート
  • MongoDB からのデータの削除