zoukankan      html  css  js  c++  java
  • MongoDB笔记1(安装配置、用户管理、查询与SQL比较)

    安装配置

    1.http://www.mongodb.org下载解压后,mongodb是一个独立的,不包含任何操作系统依赖,所以你可以在任何文件夹上运行mongodb,进到解压目录,运行:

    md data

    md data\db

    来创建数据库文件夹,也可以手动指定数据库文件平,使用以下命令:

    C:\mongodb\bin\mongod.exe --dbpath d:\test\mongodb\data

    如果路径包含空格,用双引号包起来

    C:\mongodb\bin\mongod.exe --dbpath "d:\test\mongo db data"

    用户管理

    admin登录,admin user 可以查看任何数据库,添加用户并设置用户名密码:

    $ // 连接到admin数据库,mongodb默认会有一个adminlocal的数据库

    $ mongo localhost/admin

     

    > //admin数据库,添加用户theadmin,并设置密码为anadminpassword

    > db.addUser("theadmin", "anadminpassword")

     

    > //设置theadmin的密码为:anadminpassword

    > db.auth("theadmin", "anadminpassword")

     

    > // 创建并使用projectx数据库,并在此数据库上添加一个用户名为joe

    > // 密码为passwordForJoe的用户,并授予读写权限

    > use projectx

    > db.addUser("joe", "passwordForJoe")

     

    > //在数据库projectx上添加一个用户名为guest,密码为passwordForGuest的只读用户

    > use projectx

    > db.addUser("guest", "passwordForGuest", true)

     

    > //用户信息是存在每个数据库的 system.users collection上的,例如projectx数据库上,

    > //projectx.system.users collection包含了这个数据库的用户信息,使用以下命令查看它包含的用户:

    > dbsystem.users.find();

     

    > //如果某个用户已存在,使用addUser命令,即可修改用户密码

     

    > //删除用户的命令

    > db.removeUser( username )

    > // 或者

    > db.system.users.remove( { user: username } )

    > // 检查数据库是否工作

    > db.system.users.find()

    > // 查看当前使用的数据库

    > db

     

    简单的查询

    向集合中保存数据

    > j = { name : "mongo" };

    {"name" : "mongo"}

    > t = { x : 3 };

    { "x" : 3 }

    > db.things.save(j);

    > db.things.save(t);

    > db.things.find();

    { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }

    { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }

    >

    使用for循环添加记录到集合

    for (var i = 1; i <= 20; i++) db.things.save({x : 4, j : i});

    > db.things.find();

    // find()会返回一个游标对象(cursor object),如果我们没有给此游标对象分配给一个变量,则shell会自动迭代这个游标对象,给我们一个初始化的结果集(长度为20),因此执行此命令后,shell将的自动迭代游标将只列出集合中的20条文档记录,使用it命令可查看更多结果:

    > it

    使用查询访问数据

    //把游标以迭代器的方式使用(推荐)

    while的使用

    > var cursor = db.things.find();

    > while (cursor.hasNext()) printjson(cursor.next());

    //使用迭代重复同一个查询,一次全部输出结果,printjson会将docmentjson格式输出

    forEach的使用

    > db.things.find().forEach(printjson);

    //使用forEach,就必须定义一个方法为每个文档的游标所调用,此外是内置printjson方法

     

    //把游标以数组的方式使用(不推荐)

    > var cursor = db.things.find();

    > printjson(cursor[4]);

     

    //把游标转化成实际的数组

    > var arr = db.things.find().toArray();

    > arr[5];

    指定条件的查询

    SELECT * FROM things WHERE name="mongo"

    > db.things.find({name:"mongo"}).forEach(printjson);

     

    SELECT * FROM things WHERE x=4

    > db.things.find({x:4}).forEach(printjson);

    //查询表达式也是文档,一个{a:A,b:B,...}格式的文档相当于"where a==A and b==B and ..."

     

    SELECT j FROM things WHERE x=4

    > db.things.find({x:4}, {j:true}).forEach(printjson);

    查询并仅返回一个文档findOne()

    此方法执行查询将仅返回第一条记录文档,如果没有匹配的记录会返回null

    > printjson(db.things.findOne({name:"mongo"}));

    //这个查询相当于:find({name:"mongo"}).limit(1).

     

    另外一种方式是通过_id,找出单个文档

    > var doc = db.things.findOne({_id:ObjectId("4c2209f9f3924d31102bd84a")});

    > doc

    限制结果集大小通过limit()方法

    > db.things.find().limit(3);

    //查询things collection中的文档,限制只返回前3个文档

    使用help命令可以查看 db db.collection(这里的collectioncollection的名字)的可用的方法摘要;直接键入方法的名字(不带"()")可以查看方法的原代码。

    SQLMongo的比较映射表

     

    创建表(collection)

    CREATE TABLE USERS (a Number, b Number)

    db.createCollection("mycoll")

    //mongo也可以隐式的创建,使用时发现没有即自动创建

     

    添加表字段

    ALTER TABLE users ADD ...

    //mongodb 隐式的添加,使用时发现没有即自动创建

     

    插入数据

    INSERT INTO USERS VALUES(3,5)

    db.users.insert({a:3,b:5})

     

    查询指定字段

    SELECT a,b FROM users

    db.users.find({}, {a:1,b:1})

     

    查询所有字段

    SELECT * FROM users

    db.users.find()

     

    根据条件查询

    SELECT * FROM users WHERE age=33

    db.users.find({age:33})

     

    查询并排序

    SELECT * FROM users WHERE age=33 ORDER BY name

    db.users.find({age:33}).sort({name:1})

     

    条件大于查询

    SELECT * FROM users WHERE age>33

    db.users.find({age:{$gt:33}})

     

    条件不等于查询

    SELECT * FROM users WHERE age!=33

    db.users.find({age:{$ne:33}})

     

    字符串匹配查询

    SELECT * FROM users WHERE name LIKE "%Joe%"

    db.users.find({name:/Joe/})

     

    SELECT * FROM users WHERE name LIKE "Joe%"

    db.users.find({name:/^Joe/})

     

    降序排列

    SELECT * FROM users ORDER BY name DESC

    db.users.find().sort({name:-1})

     

    复合条件查询

    SELECT * FROM users WHERE age>33 AND age<=40

    db.users.find({'age':{$gt:33,$lte:40}})

     

    SELECT * FROM users WHERE a=1 and b='q'

    db.users.find({a:1,b:'q'})

     

    SELECT * FROM users WHERE a=1 or b=2

    db.users.find({$or:[{a:1},{b:2}]})

     

    限制结果集的查询

    SELECT * FROM users LIMIT 10 SKIP 20

    db.users.find().limit(10).skip(20)

     

    SELECT * FROM users LIMIT 1

    db.users.findOne()

     

    多表查询

    SELECT order_id FROM orders o, order_line_items li WHERE li.order_id=o.order_id AND li.sku=12345

    db.orders.find({"items.sku":12345},{_id:1})

     

    SELECT customer.name FROM customers,orders WHERE orders.id="q179" AND orders.custid=customer.id

    var o = db.orders.findOne({_id:"q179"});

    var name = db.customers.findOne({_id:o.custid})

     

    去重查询

    SELECT DISTINCT last_name FROM users

    db.users.distinct('last_name')

     

    计数查询

    SELECT COUNT(*y) FROM users

    db.users.count()

     

    SELECT COUNT(*y) FROM users where AGE > 30

    db.users.find({age: {'$gt': 30}}).count()

     

    SELECT COUNT(AGE) from users

    db.users.find({age: {'$exists': true}}).count()

     

    创建索引

    CREATE INDEX myindexname ON users(name)

    db.users.ensureIndex({name:1})

     

    CREATE INDEX myindexname ON users(name,ts DESC)

    db.users.ensureIndex({name:1,ts:-1})

     

    查看查询参数

    EXPLAIN SELECT * FROM users WHERE z=3

    db.users.find({z:3}).explain()

     

    更新表(collection)

    UPDATE users SET a=1 WHERE b='q'

    db.users.update({b:'q'}, {$set:{a:1}}, false, true)

     

    UPDATE users SET a=a+2 WHERE b='q'

    db.users.update({b:'q'}, {$inc:{a:2}}, false, true)

     

    删除表(collection)

    DELETE FROM users WHERE z="abc"

    db.users.remove({z:'abc'});

  • 相关阅读:
    Codeforces 700A As Fast As Possible(二分答案)
    BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)
    Codeforces 701C They Are Everywhere(Two pointers+STL)
    Codeforces 430B Balls Game(Two Pointers)
    CSU 1812 三角形和矩形
    CSU 1804 有向无环图
    CSU 1803 2016
    CSU 1808 地铁
    CodeForces 707B Bakery
    CodeForces 707A Brain's Photos
  • 原文地址:https://www.cnblogs.com/luowei010101/p/2674093.html
Copyright © 2011-2022 走看看