How to pass argument to Mongo Script

前端 未结 6 1508
闹比i
闹比i 2020-12-12 19:41

I\'ve been using mongo and script files like this:

$ mongo getSimilar.js

I would like to pass an argument to the file:

$ mo         


        
相关标签:
6条回答
  • 2020-12-12 20:03

    Use --eval and use shell scripting to modify the command passed in.

    mongo --eval "print('apples');"

    Or make global variables (credit to Tad Marshall):

    $ cat addthem.js
    printjson( param1 + param2 );
    $ ./mongo --nodb --quiet --eval "var param1=7, param2=8" addthem.js
    15
    
    0 讨论(0)
  • 2020-12-12 20:07

    I solved this problem, by using the javascript bundler parcel: https://parceljs.org/

    With this, one can use node environment variables in a script like:

    var collection = process.env.COLLECTION;
    

    when building with parcel, the env var gets inlined:

    parcel build ./src/index.js --no-source-maps
    

    The only downside is, that you have to rebuild the script every time you want to change the env vars. But since parcel is really fast, this is not really a problem imho.

    0 讨论(0)
  • 2020-12-12 20:11

    Set a shell var:

    password='bladiebla'
    

    Create js script:

    cat <<EOT > mongo-create-user.js
    print('drop user admin');
    db.dropUser('admin');
    db.createUser({
    user: 'admin',
    pwd: '${password}',
    roles: [ 'readWrite']
    });
    EOT
    

    Pass script to mongo:

    mongo mongo-create-user.js
    
    0 讨论(0)
  • 2020-12-12 20:14

    I used a shell script to pipe a mongo command to mongo. In the mongo command I used an arg I passed to the shell script (i.e. i used $1):

    #!/bin/sh
    
    objId=$1
    EVAL="db.account.find({\"_id\" : \"$objId\"})"
    echo $EVAL | mongo localhost:27718/balance_mgmt --quiet
    
    0 讨论(0)
  • 2020-12-12 20:14

    I wrote a small utility to solve the problem for myself. With the mongoexec utility, you would be able to run the command ./getSimilar.js apples by adding the following to the beginning of your script:

    #!/usr/bin/mongoexec --quiet
    

    Within the script, you can then access the arguments as args[0].

    https://github.com/pveierland/mongoexec

    0 讨论(0)
  • 2020-12-12 20:25

    You can't do that, but you could put them in another script and load that first:

    // vars.js
    msg = "apples";
    

    and getSimilar.js was:

    print(msg);
    

    Then:

    $ mongo vars.js getSimilar.js
    MongoDB shell version: blah
    connecting to: test
    loading file: vars.js
    loading file: getSimilar.js
    apples
    

    Not quite as convenient, though.

    0 讨论(0)
提交回复
热议问题