您的位置:首页 > 数据库 > Mongodb

MongoDB 基本使用

2019-05-11 18:59 1771 查看

文章目录

  • 小试牛刀
  • 更新 update(query, update, upsert, multi)
  • 查询 find(query, show_fields)
  • 参考
  • 起步

    安装
    brew install mongodb
    
    # 遇到 Error: An unexpected error occurred during the `brew link` step 解决方法
    # 参考 https://blog.csdn.net/qq_24909089/article/details/83378210
    sudo mkdir /usr/local/Frameworks
    sudo chown -R $(whoami) /usr/local/Frameworks
    启动
    # 启动服务器
    mkdir -p ./mongodb/data/db
    mongod --dbpath ./mongodb/data/db
    
    # 启动客户端
    mongo

    小试牛刀

    查看数据库

    show dbs

    admin 0.000GB
    config 0.000GB
    local 0.000GB

    创建/进入数据库

    use test

    switched to db test
    查看当前数据库

    db

    test
    插入文档

    db.myCollection.insert({‘fruit’: ‘apple’})

    WriteResult({ "nInserted" : 1 })
    查看文档

    db.myCollection.find()

    { "_id" : ObjectId("5cd6931cb2978f4bd9becafc"), "fruit" : "apple" }
    查看当前数据库的所有集合

    show tables 或 show collections

    myCollection
    删除文档

    db.myCollection.remove()

    WriteResult({ "nRemoved" : 1 })
    删除集合

    db.myCollection.drop()

    true
    删除当前数据库

    db.dropDatabase()

    { "dropped" : "test", "ok" : 1 }

    更新 update(query, update, upsert, multi)

    $inc 增加计数

    数据准备
    db.myCollection.insert({“fruit”: “banana”, “count”: 1})

    增加 3
    db.myCollection.update({“fruit”: “banana”}, {$inc: {“count”: 3}})
    db.myCollection.find()

    # 由 1 变成 4
    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4 }
    $set 设置字段值(若不存在则创建,已存在则覆盖),$unset 删除字段

    增加字段 owner
    db.myCollection.update({“fruit”: “banana”}, {"$set": {“owner”: “xchenhao”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : "xchenhao" }

    已存在情况下则覆盖原有
    db.myCollection.update({“fruit”: “banana”}, {"$set": {“owner”: “somebody”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : "somebody" }

    删除字段
    db.myCollection.update({“fruit”: “banana”}, {"$unset": {“owner”: 1}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4 }
    $push 对数组追加元素

    db.myCollection.update({“fruit”: “banana”}, {KaTeX parse error: Expected 'EOF', got '}' at position 28: …r": "xchenhao"}}̲) db.myCollecti…push: {“owner”: “somebody”}})
    db.myCollection.update({“fruit”: “banana”}, {$push: {“owner”: “somebody”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody", "somebody" ] }
    $pop 从数组元素中弹出元素(1 从尾部,-1 从头部)

    db.myCollection.update({“fruit”: “banana”}, {$pop: {“owner”: 1}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody" ] }
    $addToSet 添加到集合中(若已存在则不会增加)

    KaTeX parse error: Expected '}', got 'EOF' at end of input: …": "banana"}, {addToSet: {“owner”: {$each: [“somebody”, “someone”]}}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody", "someone" ] }

    db.myCollection.update({“fruit”: “banana”}, {$pop: {“owner”: -1}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "somebody", "someone" ] }
    $pull 删除数组中完全匹配的元素

    db.myCollection.update({“fruit”: “banana”}, {$push: {“owner”: “somebody”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "somebody", "someone", "somebody" ] }

    db.myCollection.update({“fruit”: “banana”}, {$pull: {“owner”: “somebody”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "someone" ] }
    $set 的补充说明:对数组中的某个位置元素进行更新

    准备数据
    db.myCollection.update({“fruit”: “banana”}, {$set: {“owner”: [“xchenhao”, “somebody”, “someone”]}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "xchenhao", "somebody", "someone" ] }

    对数组第一个元素进行更新
    db.myCollection.update({“fruit”: “banana”}, {$set: {“owner.0”: “whoami”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "whoami", "somebody", "someone" ] }

    不知道位置则用 $ 代替(查找到的位置)
    db.myCollection.update({“owner”: “whoami”}, {KaTeX parse error: Expected '}', got 'EOF' at end of input: set: {"owner.": “It is me”}})
    db.myCollection.find()

    { "_id" : ObjectId("5cd69a30b2978f4bd9becafd"), "fruit" : "banana", "count" : 4, "owner" : [ "It is me", "somebody", "someone" ] }
    update 第三个参数 upsert(是否在不存在的情况下进行插入)

    db.fruit.find()
    db.fruit.update({“name”: “apple”}, {$set: {“count”: 100}}, true)

    WriteResult({
    "nMatched" : 0,
    "nUpserted" : 1,
    "nModified" : 0,
    "_id" : ObjectId("5cd6a66105b099b1e534eaed")
    })

    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 100 }

    db.fruit.update({“name”: “apple”}, {$set: {“count”: 999}}, true)
    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }
    save() 更新或创建(更新时需要指定 _id)

    db.fruit.save({“name”: “banana”, “count”: 10})

    WriteResult({ "nInserted" : 1 })

    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 10 }
    

    db.fruit.save({"_id": ObjectId(“5cd6a6a0b2978f4bd9becafe”), “name”: “banana”, “count”: 800})

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 800 }
    
    update 第四个参数是否更新多个文档(默认只更新找到的第一个文档)

    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 999 }{ "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 800 }
    

    db.fruit.update({}, {$inc: {“count”: -100}}, false, false)

    WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 899 }
    { "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 800 }

    db.fruit.update({}, {$inc: {“count”: -100}}, false, true)

    WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })

    db.fruit.find()

    { "_id" : ObjectId("5cd6a66105b099b1e534eaed"), "name" : "apple", "count" : 799 }
    { "_id" : ObjectId("5cd6a6a0b2978f4bd9becafe"), "name" : "banana", "count" : 700 }

    获取上次执行的反馈信息
    db.runCommand({getLastError: 1})

    {
    "connectionId" : 1,
    "n" : 0,
    "syncMillis" : 0,
    "writtenTo" : null,
    "err" : null,
    "ok" : 1
    }

    查询 find(query, show_fields)

    db.food.find()

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
    { "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8 }{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

    第二参数指定是否输出(0 为不输出,除了 _id 外,其它需全为 1 或 0)
    参考 https://www.runoob.com/mongodb/mongodb-query.html
    db.food.find({}, {“name”: 1, “_id”: 0})

    { "name" : "薯条" }
    { "name" : "炸鸡" }
    { "name" : "热狗" }

    查询 count 小于 10
    db.food.find({“count”: {$lt: 10}})

    { "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8 }

    查询 count 大于 10 且小于 20
    db.food.find({“count”: {$gt: 10, $lt: 20}})

    { "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

    查询 name 不等于 炸鸡
    db.food.find({“name”: {$ne: “炸鸡”}})

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
    { "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

    查询 name 属于在热狗、薯条之中的
    db.food.find({“name”: {$in: [“热狗”, “薯条”]}})

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
    { "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12 }

    查询 name 为薯条或炸鸡
    db.food.find({$or: [{“name”: “薯条”}, {“name”: “炸鸡”}]})

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条" }
    { "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8 }

    db.food2.find()

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条", "style" : [ "微辣", "香辣" ] }
    { "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8, "style" : [ "微辣", "香辣" ] }{ "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }

    查询 style 包含香辣及微辣的
    db.food2.find({“style”: {$all: [“香辣”, “微辣”]}})

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条", "style" : [ "微辣", "香辣" ] }
    { "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8, "style" : [ "微辣", "香辣" ] }

    查询 style 只有 1 个
    db.food.find({“style”: {$size: 1}})

    { "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }

    按 count 倒序排
    db.food.find().sort({“count”: -1})

    { "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"), "count" : 30, "name" : "薯条", "style" : [ "微辣", "香辣" ] }
    { "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }{ "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"), "name" : "炸鸡", "count" : 8, "style" : [ "微辣", "香辣" ] }
    

    按 count 倒序排,跳过第 1 个,输出 1 个
    db.food.find().sort({“count”: -1}).skip(1).limit(1)

    { "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"), "name" : "热狗", "count" : 12, "style" : [ "原味" ] }

    格式化输出
    db.food2.find().pretty()

    {
    "_id" : ObjectId("5cd6ec90b2978f4bd9becaff"),
    "count" : 30,
    "name" : "薯条",
    "style" : [
    "微辣",
    "香辣"
    ]
    }
    {
    "_id" : ObjectId("5cd6ecb8b2978f4bd9becb00"),
    "name" : "炸鸡",
    "count" : 8,
    "style" : [
    "微辣",
    "香辣"
    ]
    }
    {
    "_id" : ObjectId("5cd6ecc2b2978f4bd9becb01"),
    "name" : "热狗",
    "count" : 12,
    "style" : [
    "原味"
    ]
    }

    参考

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: