设为首页 收藏本站
查看: 1021|回复: 0

[经验分享] MongoDB Shell 学习

[复制链接]

尚未签到

发表于 2015-7-8 09:18:44 | 显示全部楼层 |阅读模式
  MongoDB 自带一个JavaScript Shell可以从命令行与MongoDB进行交互。
  运行MongoDB Shell :
  cmd:
  D:\MongoDB\mongodb-win32-i386-2.0.6\bin\mongo 运行,显示


D:\MongoDB\mongodb-win32-i386-2.0.6\bin>mongo
MongoDB shell version: 2.0.6
connecting to: test
>  
  可以输入 help 获取帮忙信息。
  


D:\MongoDB\mongodb-win32-i386-2.0.6\bin>mongo
MongoDB shell version: 2.0.6
connecting to: test
> help
        db.help()                    help on db methods
        db.mycoll.help()             help on collection methods
        rs.help()                    help on replica set methods
        help admin                   administrative help
        help connect                 connecting to a db help
        help keys                    key shortcuts
        help misc                    misc things to know
        help mr                      mapreduce
        show dbs                     show database names
        show collections             show collections in current database
        show users                   show users in current database
        show profile                 show most recent system.profile entries wit
h time >= 1ms
        show logs                    show the accessible logger names
        show log [name]              prints out the last segment of log in memor
y, 'global' is default
        use                 set current database
        db.foo.find()                list objects in collection foo
        db.foo.find( { a : 1 } )     list objects in foo where a == 1
        it                           result of the last line evaluated; use to f
urther iterate
        DBQuery.shellBatchSize = x   set default number of items to display on s
hell
        exit                         quit the mongo shell
>  1. 运行简单的数学运算
  


> x=200
200
> x/5
40
> Math.sin(Math.PI /2)
1
> new Date("2010/1/1")
ISODate("2009-12-31T16:00:00Z")
> "Hello,World!".replace("World","MongoDB");
Hello,MongoDB!  2. 定义和调用javascript函数
  


> function factorial(n) {
... if(n factorial(5)
120
>  
  3. 创建使用数据库
  创建了一个  foobar 数据库


> use foobar
switched to db foobar  通过命令查看一下当前数据库


> db
foobar  一看是 foobar 是我们要使用的数据库
  再用命令查看一下系统中所有的数据库


> show dbs
local   (empty)  竟然没有,为什么呢?因为 只是创建了数据库 没有正在使用数据库 数据库MongoDB其实认为不存在,那我们进行存储数据吧
  定义一个post对象


> post={"title":"My Blog Post","content":"Here's my blog post.","date":new Date()}  回车后显示对象内容


{
        "title" : "My Blog Post",
        "content" : "Here's my blog post.",
        "date" : ISODate("2012-06-15T09:22:44.953Z")
}  将对象插入数据库中,看到下面插入之前,系统还认为不存在foobar数据库,插入后就能看到foobar数据库了。


> show dbs
local   (empty)
> db
foobar
> db.blog.insert(post)
> show dbs
foobar  0.03125GB
local   (empty)
> db
foobar  find读取存储对象     find会返回集合中所有的文档 shell自动显示最多显示20个,可以继续获取更多进行查看更多文档。


> db.blog.find()
{ "_id" : ObjectId("4fdaff0b8f96acd2744b5086"), "title" : "My Blog Post", "conte
nt" : "Here's my blog post.", "date" : ISODate("2012-06-15T09:22:44.953Z") }  findOne读取存储对象 findOne 只显示一个文档


> db.blog.findOne()
{
        "_id" : ObjectId("4fdaff0b8f96acd2744b5086"),
        "title" : "My Blog Post",
        "content" : "Here's my blog post.",
        "date" : ISODate("2012-06-15T09:22:44.953Z")
}  find 和 findOne 可以带 查询条件 进行查询文档。
  
  4. 更新数据库的对象
  给变量post增加 "comments" 键,注意更新时带限制条件(不然给所有的blog都更新了),并进行查看:


> post.comments=[]
[ ]
> db.blog.update({title:"My Blog Post"},post)
> db.blog.find()
{ "_id" : ObjectId("4fdaff0b8f96acd2744b5086"), "title" : "My Blog Post", "conte
nt" : "Here's my blog post.", "date" : ISODate("2012-06-15T09:22:44.953Z"), "com
ments" : [ ] }
> db.blog.findOne()
{
        "_id" : ObjectId("4fdaff0b8f96acd2744b5086"),
        "title" : "My Blog Post",
        "content" : "Here's my blog post.",
        "date" : ISODate("2012-06-15T09:22:44.953Z"),
        "comments" : [ ]
}  5. 删除对象
  删除 也要带限制条件


> db.blog.remove({title:"My Blog Post"})
> db.blog.find()
> db.blog.findOne()
null  删除后已经查不到对象了
  再查看数据库


> db
foobar
> show dbs
foobar  0.03125GB
local   (empty)  看到 foobar 数据库还是存在,虽然 已经没有数据库了,到底为什么呢?我们使用查看集合命令:


> show collections
blog
system.indexes
>  看到 blog 集合还存在 执行删除操作


> db.blog.drop()
true
> show collections
system.indexes
>  看到blog 集合 已经不存在了 ,也可以使用 命令进行删除 db.runCommand({"drop" : "blog"})  两者功能一样。


> db.runCommand({"drop":"blog"})
{
        "nIndexesWas" : 1,
        "msg" : "indexes dropped for collection",
        "ns" : "foobar.blog",
        "ok" : 1
}
> db.blog.findOne()
null
> show collections
system.indexes
>  删除当前前数据库 db.dropDatabase()


> db
foobar
> db.dropDatabase()
{ "dropped" : "foobar", "ok" : 1 }
> show dbs
local   (empty)
>  另一种方法也是删除当前数据库 db.runCommand({"dropDatabase": 1}); ,执行之前一定要用 db 看一下 当前数据库是什么,不要删除错了,后悔抓狂。。
  6. 一些使用技巧
  a. 了解函数功能,直接数据函数名称 不输入刮号和参数,这样就会显示函数的javascript源代码。比如我们想看看update的原理,或者看看参数的顺序和具体执行:


> db.test.update
function (query, obj, upsert, multi) {
    assert(query, "need a query");
    assert(obj, "need an object");
    var firstKey = null;
    for (var k in obj) {
        firstKey = k;
        break;
    }
    if (firstKey != null && firstKey[0] == "$") {
        this._validateObject(obj);
    } else {
        this._validateForStorage(obj);
    }
    this._mongo.update(this._fullName, query, obj, upsert ? true : false, multi
? true : false);
}
>  这些函数的具体代码可以访问 http://api.mongodb.org/js
  b. 还有一些跟系统冲突的集合名
  我们一般使用 db.集合名 的方式来访问集合,但是如果一个集合刚好是数据库类的一个属性,比如: db.version 就不行


> db.version
function () {
    return this.serverBuildInfo().version;
}
>  当函数在db中找不到属性时,才会将其作为集合查询返回。当属性和目标结合同名时,可以使用 getCollection 函数


> db.getCollection("version")
test.version
>  代码小技巧 既然 x.y 跟 x['y'] 等同 可以如下代码:
  var collections = [ "posts" , "comments" , "authors" ];
  for( i in collections ) {
  doStuff( db.blog[collections] );
  }
  而不是 笨笨的写法调用 三遍;
  doStuff( db.blog.posts );
  doStuff( db.blog.comments);
  
  doStuff( db.blog.authors);

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84375-1-1.html 上篇帖子: MongoDB 使用经验笔记 下篇帖子: MongoDB 入门之基础 DCL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表