1. ホーム
  2. mongodb

MongoDBラーニングノート

2022-03-15 08:56:16



この記事は、以下を参照しています。
http://www.codefrom.com/p/mongodb
http://www.cnblogs.com/spnt/archive/2012/07/25/2608057.html

1、クイックスタート

MongoDBのインストール


私はWindowsプラットフォーム用のmongodbインストールを選びました。これも非常に簡単で、対応するOSバージョンのmongodbをダウンロードすればいいだけです。(ZIPインストーラーをダウンロードすることをお勧めします)

mongodbが使用可能であることをどのように確認するのですか?


1. コマンドラインからmongodbのインストールディレクトリに移動します。 

G:\JavaData\mongoDB\bin



2. コマンドラインでの実行 
mongod -dbpath G:\JavaData\mongoDBDATA


G:\JavaData\mongoDB\bin>mongod --dbpath G:\JavaData\mongoDBDATA



3. 実行後、以下のことが観察されます。  waiting for connections on port 27017  は mongodb が正常に起動したことを示しています。

MongoDB の一般的な操作


Mongodbサービスが正常に起動したら、クライアントツールを使ってmongodbに接続することができます。ここでは mongo が提供するクライアントツールを使っています。インストールしたばかりの mongodb ディレクトリの bin ディレクトリにあります。

もう一度、mongodbのbinディレクトリに移動して、mongoコマンドを実行します。

G:\JavaData\mongoDB\bin>mongo
MongoDB shell version: 2.6.3
connecting to: test
>


もちろん、すでに  G:\JavaData\mongoDB\bin を環境変数に設定すれば、ディレクトリを切り替えずにmongoを実行し、結果を直接確認することができます。

上記のクライアント接続の結果からわかるように、デフォルトではデータベース test に接続します。もしmongodbが今いくつのデータベースをもっているかを知りたい場合は、コマンド

> show dbs
admin (empty)
foobar 0.203GB
local 0.078GB
piedra 0.078GB
>


どのデータベースが現在使われているかを知りたい場合は  db  コマンド

> db
test


別のデータベースに切り替えたい場合は、コマンド 

user <your-dbname>
> use piedra
switched to db piedra


現在のデータベースにあるコレクションを表示する

show collections
> show collections
system.indexes
users


もちろん、初回に実行するために使用する場合は  show collection  初回は結果が空になりますが、コレクションにデータを挿入すると、コレクションと対応するデータベースが作成されることが確認できます。

> show dbs
admin (empty)
foobar 0.203GB
local 0.078GB
piedra 0.078GB
> use demo
switched to db demo
> show collections
> db.users.insert({username:"linwenbin",pwd:"1234"})
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "username" : "linwenbin", "pwd" : " 1234" }
>


上記のアクションでは、デモデータベースに切り替え、usersコレクションを作成し、usersコレクションにデータの一部を挿入しています。

mongodbのコレクションは、mysqlやOracleのテーブルと同じ概念です。

データの挿入


mongodbでは、db.collectionName.insert({data}) または db.collectionName.save({data}) というコマンドでデータを挿入してください。

どちらの方法も問題なく動作します。上記のinsertメソッドについて、saveメソッドを使用した場合のデモを紹介します。

> db
demo
> show collections
system.indexes
users
>
> db.users.save({username:"saveMethod",pwd:"123"}) 
WriteResult({ "nInserted" : 1 })


saveメソッドは、_idが指定されない場合はinsertと同じように動作しますが、_idが指定された場合は、コレクション内に対応する_idが既に存在すれば、古い文書を新しい文書で上書きすることに注意しましょう。

データの修正


また、データを修正するには、文書全体を修正する方法と、一部を修正する方法の2つがあります。まず第一に、我々は最初のドキュメント全体の変更を導入し、我々は最初のデータのコレクションは、比較後の操作を容易にし、変更するためにクエリを使用する

> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "username" : "linwenbin", "pwd" : " 1234" }
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 123" }
>


最初の方法: db.collectionName.update({criteria},{data}); このメソッドは、ドキュメント全体を置き換えます。

> db.users.update({username:"linwenbin"},{age:22})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find({username:'linwenbin'})
>


ユーザー名「linwenbin」のデータを修正した後に探しに行くと、存在しないことがわかります。

2つ目の方法: db.collectionName.update({criteria},{set:{newData}}); ここで、別のデータに対してセットの変更を行います。

> db.users.update({username:"saveMethod"},{$set:{pwd:"9999"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "age" : 22 }
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 9999" }
>



ユーザー名saveMethodのデータのpwdが正常に'9999'に変更され、他の属性が新しいデータで上書きされていないことが確認できます。

データへのクエリ


mongodbのクエリメソッドは、上記でも何度か出てきたfindメソッド、db.collectionName.find({criteria})です。

> db.users.find({age:22})
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "age" : 22 }
>


findメソッドの条件が何も指定されていない場合は、すべてのデータに対するクエリとなります。

また、クエリの結果として表示されるフィールドを指定することもできますが、これについてはmongodbのマニュアルを参照してください。

データの削除


コレクションを削除したい場合は、db.collectionName.drop();で削除できます。

コレクション内のデータを削除したい場合は、db.collectionName.remove({criteria})を使用します。

上記のアクションをベースに、データ {age:22} を削除してみます。

> db.users.find()
{ "_id" : ObjectId("55717e7ae25992bae59cca65"), "age" : 22 }
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 9999" }
> db.users.remove({age:22})
WriteResult({ "nRemoved" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 9999" }
>


MongoDBインデックス


インデックスとは何ですか?


インデックスは、テーブルの上に作成され、ユーザーからは見えません。インデックスはルックアップを高速化しますが、余分なスペースを追加するので、慎重に作成してください。また、mongodbはコレクションごとのインデックスの数に制限があります。

要するに、インデックスはデータの場所をより速く特定する方法を提供します。

mongodbのインデックスをクエリする方法


現在のコレクションが持つインデックスを確認するには、db.collectionName.getIndexes()というコマンドを使用します。

> db.users.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "demo.users"
        }
]
>


キーは _id で、これはコレクションを作成するときに mongodb が自動的に作成するデフォルトのプライマリキーインデックスです。

mongodbがインデックスを作成する方法


では、この時点でusersコレクションのユーザー名に対してインデックスを作成したい場合、どうすればよいでしょうか。

> db.users.ensureIndex({username:1})
{
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
}


これでインデックスが作成されたことになるので、usresコレクションのインデックスを見てみましょう。

> db.users.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "demo.users"
        },
        {
                "v" : 1,
                "key" : {
                        "username" : 1
                },
                "name" : "username_1",
                "ns" : "demo.users"
        }
]
>


usernameをキーとするインデックスが追加されていることがわかります。作成されたインデックス db.users.ensuerIndex({username:1}) の 1 は正のインデックスを、-1 は逆インデックスを意味します。

mongodbでインデックスを削除する方法


db.collectionName.dropIndex(column) を使ってインデックスを削除する場合

> db.users.dropIndex({username:1})
{ "nIndexesWas" : 2, "ok" : 1 }
> db.users.getIndexes()
[
        {
                "v" : 1,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_",
                "ns" : "demo.users"
        }
]
>


このとき、単純なインデックス作成操作も記録される。





2. MongoDB学習ノート その2 mongodbのセキュリティ

mongodb のセキュア認証を有効にするには、mongod サービスの起動時に -auth パラメータを指定して セキュア認証が有効であることを示す必要があります。

mongod --auth


開通後、クライアント経由で接続すると、接続はできるが、操作はできない

G:\JavaData\mongoDB\bin>mongo
MongoDB shell version: 2.6.3
connecting to: test

> show collections
2015-06-05T20:10:51.608+0800 error: {
        "$err" : "not authorized for query on test.system.namespaces",
        "code" : 13
} at src/mongo/shell/query.js:131
>


プロンプトから、このエラーは認証がないことが原因であることがわかります。

データベース管理者に切り替えて、ユーザーを追加します。ユーザーを作成する構文は次のとおりです。

db.createUser({
    user:"username",
    pwd:"password",
    customData:{any info},
    roles:[{role:"

"
,db:"
"
},{role:"
"
,db:"
"
}]
})


ここで、mongodb には組み込みのロールがあります:read, readWrite, dbAdmin, dbOwner, userAdmin, dbAdminAnyDatabase, userAdminAnyDatabase, readWriteAnyDatabase readAnyDatabase, clusterAdmin。

この例では、次のステートメントを使用して、読み取り専用権限を持つデモデータベース用のlwbユーザーを作成します。

> db.createUser({user:"lwb",pwd:"lwb",roles:[{role:"read",db:"demo"}]})
Successfully added user: {
        "user" : "lwb",
        "roles" : [
                {
                        "role" : "read",
                        "db" : "demo"
                }
        ]
}
> db
demo


は  db.auth("lwb","lwb")  を認証する

> use demo
switched to db demo
> show collections
2015-06-05T20:31:15.034+0800 error: {
        "$err" : "not authorized for query on demo.system.namespaces",
        "code" : 13
} at src/mongo/shell/query.js:131
> db.auth("lwb","lwb")
1
> show collections
system.indexes
users
> db.users.find()
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 9999" }


表示するための認証はできていますが、読み取り権限を指定したので、データを挿入できるかどうかをテストする必要があります。

> db.users.insert({username:'abc'})
WriteResult({
        "writeError" : {
                "code" : 13,
                "errmsg" : "not authorized on demo to execute command { insert: \"users\", documents: [ { _id: ObjectId(' 557196b2e661d1419e528fbb'), username: \
"abc\" } ], ordered: true }"
        }
})
>


ご覧の通り、認証に失敗しています。これは、lwb ユーザーが demo データベースの users コレクションにデータを挿入できないことを意味します。

比較のため、ユーザーrwu(read write user)を挿入し、このユーザーにreadWriteの権限を与えました。

> use admin
switched to db admin
> db.auth("admin","admin")
1
> db.createUser({user:"rwu",pwd:"rwu",roles:[{role:"readWrite",db:"demo"}]})
Successfully added user: {
        "user" : "rwu",
        "roles" : [
                {
                        "role" : "readWrite", //with read-write privileges
                        "db" : "demo" //read and write permissions for the demo database
                }
        }
}
> use demo
switched to db demo
> show collections
system.indexes
users
> db.users.find()
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 9999" }
> db.users.save({username:"rwu",pwd:"rwu"}) //insert a piece of data, inserting it successfully means the authorization is successful
WriteResult({ "nInserted" : 1 })
> db.users.find()
{ "_id" : ObjectId("55717fd5e25992bae59cca66"), "username" : "saveMethod", "pwd" : " 9999" }
{ "_id" : ObjectId("557198f5e661d1419e528fbc"), "username" : "rwu", "pwd" : "rwu& quot; }
>


上記の観察から、readWrite パーミッションを持つ新規作成ユーザー rwu は、demo データベースの users コレクションにデータを挿入できることがわかります。

パーミッションについては以上です。詳しくは mongodbのマニュアル .

















3. MongoDB学習ノート その3 JAVA-DRIVERの場合

環境整備。

1.mongoが正常に動作すること、第1回目の記事を参照

2. すでにデモ用データベースがある場合は、データがクリーンであることを確認するため、削除することをお勧めします。

use demo
switched to db demo
db.dropDatabase()
{ "dropped" : "demo", "ok" : 1 }


この記事では、ユーザー認証をオンにして直接操作することはありません。プロジェクトのビルドにはgradleを使用します。(gradleの使い方は、gradle入門の記事を参照してください)

プロジェクトmongoを作成し、ルートディレクトリの下にbuild.gradleファイルを作成します。

apply plugin:"java"
apply plugin:"eclipse"

repositories{
    mavenCentral()
}

dependencies{
    compile 'org.mongodb:mongo-java-driver:3.0.2'
}


さらに、mavenと合意した通りにソースファイルを作成します。

└─src
   └─main
       ├─java
       └─resources


そして、今後のソースコードはjavaディレクトリの下に、リソースファイルはresourcesディレクトリの下に配置されることになります。

ここからmongo-javaの旅が始まります。

mongoプロジェクトのルートパスで > gradle cleanEclipse eclipse を実行して、Eclipse java プロジェクトを生成します。そして、次のようにEclipseのImport...機能を使ってmongoプロジェクトを取り込みます。

D:\workspace_myeclipse\mongo> gradle cleanEclipse eclipse

package com.piedra.mongo;

import static com.mongodb.client.model.Filters.and;
import static com.mongodb.client.model.Filters.eq;
import static com.mongodb.client.model.Filters.gt;
import static com.mongodb.client.model.Filters.lte;

import java.util.ArrayList;
import java.util.List;

import org.bson;
import org.bson.conversions.Bson;

import com.mongodb.Block;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;

/**
 * HelloMongo 
 * Reference: http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/
 * @author LINWENBIN
 * @since 2015-6-6
 */
public class HelloMongo {

    /**
     * Insert a piece of data into a collection
     * @param coll
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void insertOne(MongoCollection<Document> coll){
        /*
        {
           "name" : "MongoDB",
           "type" : "database",
           "count" : 1,
           "info" : {
                       x : 203,
                       y : 102
                     }
        }
        */
        System.out.println("insertOne Number of users collection before inserting record:" + coll.count());

        Document doc = new Document("name","MongoDB")
        .append("type","database").append("count", 1).append("info", new Document("x"," ;203").append("y","102"));

        coll.insertOne(doc);

        System.out.println("insertOne insert the number of users collection after inserting records:" + coll.count());
    }

    /**
     * Insert multiple data
     * @param coll
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void insertMany(MongoCollection<Document> coll){
        /*
         * insertMany(MongoCollection<Document> coll)
         */
        List<Document> docs = new ArrayList<Document>();
        for(int i=0; i<10; i++){
            docs.add(new Document("i",i));
        }

        coll.insertMany(docs);

        System.out.println("insertMany inserting 10 {i:i} records after users collection: " + coll.count());        
    }

    /**
     * Query all the data in the collection coll
     * @param coll
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void findAll(MongoCollection<Document> coll){
        MongoCursor<Document> cursor = coll.find().iterator();
        try {
            System.out.println("findAll Print result: ");
            while(cursor.hasNext()){
                System.out.println(cursor.next().toJson());
            }
        } finally {
            cursor.close();
        }
    }

    /**
     * Query the first piece of data that meets the condition
     * @param coll
     * @param filter
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void findSpecifyDoc(MongoCollection<Document> coll, Bson filter){
        System.out.println("findSpecifyDoc print result: ");
        System.out.println(coll.find(filter).first().toJson());
    }

    /**
     * query to meet the conditions of the document collection
     * @param coll
     * @param filter
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void findDocs(MongoCollection<Document> coll, Bson filter){
        Block<Document> printBlock = new Block<Document>() {
             @Override
             public void apply(final Document document) {
                 System.out.println(document.toJson());
             }
        };
        System.out.println("findDocs print result: ");
        coll.find(filter).forEach(printBlock);
    }

    /**
     * Update document properties
     * @param coll The collection to be manipulated
     * @param criteria the document filter to be updated
     * @param newDoc new document property
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void update(MongoCollection<Document> coll, Bson criteria, Document newDoc){
        coll.updateMany(criteria, new Document("$set",newDoc));
    }

    /**
     * Delete a document
     * @param coll
     * @param criteria
     * @since 2015-6-6
     * @author LINWENBIN
     */
    public void delete(MongoCollection<Document> coll, Bson criteria){
        coll.deleteMany(criteria);
    }

    public static void main(String[] args) {
        HelloMongo helloMongo = new HelloMongo();

        //mongoClient instance itself represents the database connection pool
        MongoClient mongoClient = new MongoClient("127.0.0.1", 27017);
        /**
         * Calling the getDatabase() on MongoClient does not create a database. 
         * Only when a database is written to will a database be created
         */
        MongoDatabase db = mongoClient.getDatabase("demo");
        MongoCollection<Document> users = db.getCollection("users");


        helloMongo.insertOne(users);
        helloMongo.insertMany(users);
        helloMongo.findAll(users);
        helloMongo.findSpecifyDoc(users, eq("i",5));
        helloMongo.findDocs(users, and(gt("i",6),lte("i",8)));

        helloMongo.update(users, and(gt("i",6),lte("i",8)), new Document("ii",99));
        helloMongo.findDocs(users, and(gt("i",6),lte("i",8)));

        helloMongo.delete(users, and(gt("i",6),lte("i",8)));
        helloMongo.findDocs(users, and(gt("i",6),lte("i",8)));

        // destroy
        mongoClient.dropDatabase("demo");
        //close the database connection
        mongoClient.close();
    }
}
Print the results.


insertOne 插入记录之前 users集合的数量:0
einfügenEin 插入记录之后 benutzer集合的数量:1
insertMany 插入10条 {i:i} 记录之后 users集合的数量:11
findAll 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bd8" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "x" : "203", "y" : "102" } }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bd9" }, "i" : 0 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bda" }, "i" : 1 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdb" }, "i" : 2 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdc" }, "i" : 3 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdd" }, "i" : 4 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bde" }, "i" : 5 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bdf" }, "i" : 6 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be0" }, "i" : 7 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be1" }, "i" : 8 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be2" }, "i" : 9 }
findSpecifyDoc 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42bde" }, "i" : 5 }
findDocs 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be0" }, "i" : 7 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be1" }, "i" : 8 }
findDocs 打印结果:
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be0" }, "i" : 7, "ii" : 99 }
{ "_id" : { "$oid" : "5572841e0ef45c0bf0e42be1" }, "i" : 8, "ii" : 99 }
findDocs 打印结果:







<イグ

HelloMongo.javaのソースコードは次のとおりです。

4, MongoDB学习札记第四篇之クエリ





查询条件

首先往数据库集合里面插入几条数据 ...

测试数据:

> db.users.insert({username:"mongo", url:"webinglin.github.io", tags:["mongodb", database","nosql"],likes:999, author:"linwenbin"})
> db.users.insert({Benutzername:"redis", url:"webinglin.github.io", tags:["redis","database","nosql"],likes:888, author:"linwenbin"})
> db.users.insert({username:"spring", url:"webinglin.github.io", tags:["spring","framework"],likes:777, author:"linwenbin"})

> db.users.find().pretty()
{
        "_id" : ObjectId("5574bdabc705777157a515aa"),
        "username" : "mongo",
        "url" : "webinglin.github.io",
        "tags" : [
                "mongodb",
                "database",
                "nosql"
        ],
        "likes" : 999,
        "author" : "linwenbin"
}
{
        "_id" : ObjectId("5574bdd2c705777157a515ab"),
        "username" : "redis",
        "url" : "webinglin.github.io",
        "tags" : [
                "redis",
                "database",
                "nosql"
        ],
        "likes" : 888,
        "author" : "linwenbin"
}
{
        "_id" : ObjectId("5574bdf3c705777157a515ac"),
        "username" : "spring",
        "url" : "webinglin.github.io",
        "tags" : [
                "spring",
                "framework"
        ],
        "likes" : 777,
        "author" : "linwenbin"
}


pretty() 方法是对查询结果进行格式化

查询的时候可以带上查询条件,那具体的查询条件怎么使用?

その他

等于操作直接使用{key:value}这样的文档形式即可。

> db.users.find({username:"mongo"})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github. io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
>


大于

语法:{key : {$gt:value}。}

> db.users.find({likes:{$gt:888}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github. io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
>


大于等于

语法:{key : {$gte:value}。}

> db.users.find({likes:{$gte:888}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github. io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github. io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }


小于

语法:{key : {$lt:value}. }

> db.users.find({likes:{$lt:888}})
{ "_id" : ObjectId("5574bdf3c705777157a515ac"), "username" : "spring", "url" : "webinglin. github.io", "tags" : [ "spring", "framework" ], "likes" : 777, "author" : "linwenbin" }


小于等于

语法:{key : {$lte:value}}。

> db.users.find({likes:{$lte:888}})
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github. io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdf3c705777157a515ac"), "username" : "spring", "url" : "webinglin. github.io", "tags" : [ "spring", "framework" ], "likes" : 777, "author" : "linwenbin" }


不等于

语法:{key : {$ne:value}。}

> db.users.find({likes:{$ne:888}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github. io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdf3c705777157a515ac"), "username" : "spring", "url" : "webinglin. github.io", "tags" : [ "spring", "framework" ], "likes" : 777, "author" : "linwenbin" }


且操作アンド

语法:{key1:value1, key2:value2, key3:value3 ...}。

> db.users.find({likes:{$gt:777},username:"mongo"})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github. io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }

> db.users.find({likes:{$gt:777}})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : "webinglin.github. io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, "author" : "linwenbin" }
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : "webinglin.github. io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, "author" : "linwenbin" }



または演算OR

構文 { $or: [ {key1: value1}, {key2: value2} ] } or条件の {key:value} をすべて$orの値(配列)に入れる。

> db.users.find({$or:[{username:"mongo"},{username:"redis"}]})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : " webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, " quot;author" : "linwenbin" }
{ "_id" : ObjectId("5574bdd2c705777157a515ab"), "username" : "redis", "url" : " webinglin.github.io", "tags" : [ "redis", "database", "nosql" ], "likes" : 888, " author" : "linwenbin" }


複雑な条件付きクエリ

すべての条件を連結して使うには?

例えば、次のようなクエリにしたい>=888 && (username="mongo" or username="spring")

上記のデータ項目は3つしかないので、like>=888を満たすのはmongoとredisだけで、その後にusername="mongo" or username="spring " もmongoとspringが条件を満たすことがわかり、この2つと操作の後に条件を満たすのはmongoだけが残っていることがわかるのです。というわけで、最終的には mongo 用のドキュメントができあがるはずです。

> db.users.find({likes:{$gte:888},$or:[{username:"mongo"},{username:"spring"}]})
{ "_id" : ObjectId("5574bdabc705777157a515aa"), "username" : "mongo", "url" : " webinglin.github.io", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 999, " quot;author" : "linwenbin" }
>


find() のその他の使用法

投影

mongodbで、すべてのフィールドではなく、見たいフィールドを表示するという意味のプロジェクションとは何でしょうか?