mono実行JavaScriptスクリプト

8742 ワード

mongoクライアントは、2つの方法でmongodbサービスと対話することができます.1つはmongo shellで、1つはjavascriptスクリプトを実行することです.mongo shellは、通常より多く使われていますが、javascriptスクリプトはあまり使われません.この間、一つのプロジェクトの中でjsスクリプトの量を書いてデータを更新しました.まとめてみます.
どのように実行しますか
  • mongo host:port/database/dir/xxxx.js
  • 例:モンゴルロカホスト:27017/hr_assistant index.jsはindex.jsの中で先にmongodbと挨拶して、それから現在のデータベースを印刷します.
    print('hello mongodb')
    //           
    print(db);
    実行結果:
    MongoDB shell version v4.0.11
    connecting to: mongodb://localhost:27017/hr_assistant?gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("3e0c8e42-57d5-429d-a00d-bad97ec95d73") }
    MongoDB server version: 4.0.11
    hello mongodb
    hr_assistant
  • 上記の方法は、mongoクライアントによって直接にjsスクリプトを実行することであり、クライアントに入るコマンドラインインタラクションにおいて、ロード関数を使用してスクリプト
  • をロードすることもできる.
    例:
    //      
    pan@ubuntu18:~/disk/panyanan/blog/mongodb$ mongo localhost:27017/hr_assistant
    MongoDB shell version v4.0.11
    connecting to: mongodb://127.0.0.1:27017/
    // load    
    > load('index.js')
    hello mongodb
    hr_assistant
    true
    
    上記の2つの方法に注意してください.スクリプトのパス問題に注意してください.シナリオのすべてのフォルダで、mongoコマンドを実行してください.
    jsシナリオとモノモンシェルの違い
    mongo Shellは簡略版のJavaScript Shellであり、javascriptコードを自由に作成できます.また、多くのmongodb特有のオブジェクトと方法が内蔵されていますが、脚本ではshow databases、show collection、use testのようなコマンドは使えません.以下の表は、一般的なコマンドに対応する関数です.
    command
    機能
    show dbs,show databases
    db.adminCommund('listDatabases')
    use db
    db=db.getSiblingDB('db')
    ショー・コレクション
    db.get Collection Names()
    show users
    db.getUsers()
    jsスクリプトでよく使われる2つの関数があります.print()/print json()はパラメータを標準出力に印刷できます.
    例index.js:
    //     --nodb      mongo            
    const conn = new Mongo('localhost:27017');
    print(`  : ${conn}`)
    let db = conn.getDB('hr_assistant');
    print(`     :${db}`);
    const dbs = db.adminCommand('listDatabases');
    print('        :')
    printjson(dbs);
    const collections = db.getCollectionNames();
    print(`${db}  collections:`);
    printjson(collections);
    db = db.getSiblingDB('test');
    print(`      ${db}`);
    実行結果:
    pan@ubuntu18:~/disk/panyanan/blog/mongodb$ mongo --nodb index.js
    MongoDB shell version v4.0.11
      : connection to localhost:27017
         :hr_assistant
            :
    {
            "databases" : [
                    {
                            "name" : "admin",
                            "sizeOnDisk" : 32768,
                            "empty" : false
                    },
                    {
                            "name" : "config",
                            "sizeOnDisk" : 49152,
                            "empty" : false
                    },
                    {
                            "name" : "hr_assistant",
                            "sizeOnDisk" : 98873344,
                            "empty" : false
                    },
                    {
                            "name" : "local",
                            "sizeOnDisk" : 73728,
                            "empty" : false
                    }
            ],
            "totalSize" : 99028992,
            "ok" : 1
    }
    hr_assistant  collections:
    [
            "hr_business_call_records",
            "hr_business_info_collection",
            "hr_business_info_follow",
            "hr_business_info_interviewed",
            "hr_business_info_meeting",
            "hr_business_info_planned",
            "hr_business_info_user",
            "hr_business_resume_assessment",
            "hr_business_resume_basic_work",
            "hr_business_resume_basiceducation",
            "hr_business_resume_basichealth",
            "hr_business_resume_basicinfo",
            "hr_business_resume_head_portrait",
            "hr_business_resume_jobobjective",
            "hr_business_resume_percentage",
            "hr_business_resume_workexp",
            "hr_business_sign_list",
            "hr_business_signed_result"
    ]
          test
    楽しい遊び
    jsスクリプトをどうやって実行するかということと、mongoshellとの違いを知ると、jsファイルではcurdBoyとなります.jsファイルでは、mongoクライアントが提供する添削のすべての方法が利用できます.js内蔵オブジェクト/配列の方法を加えると、鬼に金棒です.以下は簡単な例です.
    const conn = new Mongo('localhost:27017');
    const db = conn.getDB('test');
    //  emp         
    let emps =[
      {
        ename: 'Smith',
        deptno: 20,
        job: 'salesman',
        mgr: '',
        sal: 800,
      },
      {
        ename: 'Peter',
        deptno: 30,
        job: 'manager',
        mgr: '',
        sal: 1000,
      },
      {
        ename: 'Jack',
        deptno: 40,
        job: 'president',
        mgr: '',
        sal: 3000,
      },
      {
        ename: 'Rose',
        deptno: 50,
        job: 'analyst',
        mgr: '',
        sal: 1500,
      },
    ] 
    //     
    let result = db.emps.insert(emps);
    print(`        `)
    print(result);
    //   jack
    let jack = db.emps.findOne({ename: 'Jack'});
    print(`  jack:`)
    printjson(jack)
    //   jack    5000
    result = db.emps.update({_id: jack._id}, {$set: {sal: 5000}})
    jack = db.emps.findOne({ename: 'Jack'});
    //       jack
    print('      jack:')
    printjson(jack)
    //        
    emps = db.emps.find({});
    print('       :');
    //           jordan
    emps.forEach(function(emp) {
      printjson(emp);
      emp.mgr = 'Jordan';
      db.emps.save(emp)
    });
    
    emps = db.emps.find({});
    print('          jordan');
    while(emps.hasNext()) {
      printjson(emps.next())
    }
    result = db.emps.remove({}); 
    print(`    :: ${result}`);
    実行結果
    pan@ubuntu18:~/disk/panyanan/blog/mongodb$ mongo --nodb curd.js
    MongoDB shell version v4.0.11
            
    BulkWriteResult({
            "writeErrors" : [ ],
            "writeConcernErrors" : [ ],
            "nInserted" : 4,
            "nUpserted" : 0,
            "nMatched" : 0,
            "nModified" : 0,
            "nRemoved" : 0,
            "upserted" : [ ]
    })
      jack:
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6c"),
            "ename" : "Jack",
            "deptno" : 40,
            "job" : "president",
            "mgr" : "",
            "sal" : 3000
    }
          jack:
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6c"),
            "ename" : "Jack",
            "deptno" : 40,
            "job" : "president",
            "mgr" : "",
            "sal" : 5000
    }
           :
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6a"),
            "ename" : "Smith",
            "deptno" : 20,
            "job" : "salesman",
            "mgr" : "",
            "sal" : 800
    }
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6b"),
            "ename" : "Peter",
            "deptno" : 30,
            "job" : "manager",
            "mgr" : "",
            "sal" : 1000
    }
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6c"),
            "ename" : "Jack",
            "deptno" : 40,
            "job" : "president",
            "mgr" : "",
            "sal" : 5000
    }
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6d"),
            "ename" : "Rose",
            "deptno" : 50,
            "job" : "analyst",
            "mgr" : "",
            "sal" : 1500
    }
              jordan
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6a"),
            "ename" : "Smith",
            "deptno" : 20,
            "job" : "salesman",
            "mgr" : "Jordan",
            "sal" : 800
    }
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6b"),
            "ename" : "Peter",
            "deptno" : 30,
            "job" : "manager",
            "mgr" : "Jordan",
            "sal" : 1000
    }
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6c"),
            "ename" : "Jack",
            "deptno" : 40,
            "job" : "president",
            "mgr" : "Jordan",
            "sal" : 5000
    }
    {
            "_id" : ObjectId("5d44fdd70998b36ed6983e6d"),
            "ename" : "Rose",
            "deptno" : 50,
            "job" : "analyst",
            "mgr" : "Jordan",
            "sal" : 1500
    }
        :: WriteResult({ "nRemoved" : 4 })
    転載先:https://www.cnblogs.com/pandapeter/p/11294232.html