mongodb语法

use 选择/创建数据库

use 如果数据库不存在则创建

use databases

create 创建集合

db.createCollection("demo")

drop 删除集合

db.demo.drop()

find 查找

find、findOne

db.demo.find()
db.demo.findOne()

ObjectId

db.demo.find({"_id": ObjectId("5f0183767deef9bead24c180")})

findOne

db.demo.findOne({"age": 22})

limit、skip、sort

db.demo.find({"age": {"$gte": 20}}).limit(3).skip(1).sort({"age": 1})

in

db.demo.find({"age": {$in: [18, 20]}})

not in

db.demo.find({"age": {$nin: [18, 20]}})

条件操作符 gt、gte、lt、lte、ne、eq
gt >
gte >=
lt <
lte <=
ne !=
eq =

db.demo.find({"age": {$gt: 20}})
db.demo.find({"age": {$gte: 20}})
db.demo.find({"age": {$lt: 20}})
db.demo.find({"age": {$lte: 20}})
db.demo.find({"age": {$ne: 20}})
db.demo.find({"age": {$eq: 20}})

or

db.demo.find({$or: [{"age": 18}, {"age": 22}]})

正则表达式

db.demo.find({"email": {$regex: "u"}})
db.demo.find({"email": /z/})

原子操作

db.demo.findAndModify({
    "query": {
            "_id": ObjectId("5f01851a7deef9bead24c19f"),
        },
    "update": {
            $set: {
                "age": 29
                }
        }
})
db.demo.findAndModify({
    "query": {
            "_id": ObjectId("5f0185217deef9bead24c1d2"),
        },
    "update": {
            $set: {
                "age": 30
                }
        },
    "new": true
})

explain 查询分析

db.demo.find().explain()

insert添加文档

db.demo.insert({
    "uid" : 8,
    "name" : "华佗",
    "age" : 29,
    "sex" : "男",
    "email" : "huatuo@sanguo.com",
    "mobile" : "13366666666"
})
db.demo.insert([
    {
        "uid" : 6,
        "name" : "法正",
        "age" : 29.0,
        "sex" : "男",
        "email" : "fazheng@sanguo.com",
        "mobile" : "13366666666"
    },
    {
        "uid" : 7,
        "name" : "荀彧",
        "age" : 29.0,
        "sex" : "男",
        "email" : "xunyu@sanguo.com",
        "mobile" : "13366666666"
    }
])
db.demo.insertOne({
    "uid" : 8,
    "name" : "华佗",
    "age" : 29,
    "sex" : "男",
    "email" : "huatuo@sanguo.com",
    "mobile" : "13366666666"
})
db.demo.insertMany([
    {
        "uid" : 6,
        "name" : "法正",
        "age" : 29.0,
        "sex" : "男",
        "email" : "fazheng@sanguo.com",
        "mobile" : "13366666666"
    },
    {
        "uid" : 7,
        "name" : "荀彧",
        "age" : 29.0,
        "sex" : "男",
        "email" : "xunyu@sanguo.com",
        "mobile" : "13366666666"
    }
])

update 更新文档

upsert:可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi:可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

db.demo.update({"age": 16}, {"$set": {"age": 18}}, {"upsert": true, "multi": true})
db.demo.update({"age": 18}, {"$set": {"age": 16}}, false, false)

inc 参数为1时自加1,为-1时自减1

db.demo.update({"sex": "男"}, {$inc: {"age": 1}})
db.demo.update({"sex": "男"}, {$inc: {"age": 1}}, {"upsert": true, "multi": true})
db.demo.update({"sex": "男"}, {$inc: {"age": -1}})
db.demo.update({"sex": "男"}, {$inc: {"age": -1}}, {"upsert": true, "multi": true})

remove 删除文档

justOne:可选,如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

db.demo.remove({"age": 18}, {"justOne": true})

delete 这个是官方推荐的方法deleteMany删除全部文档、deleteOne删除一条文档

db.demo.deleteMany({})
db.demo.deleteOne({})

index索引

创建索引

db.demo.ensureIndex({"age": 1}, {"background": true, "unique": false, "name": "age", "dropDups": false, "v": 1, "weights": 1})

获取全部索引

db.demo.getIndexes()

获取索引大小

db.demo.totalIndexSize()

删除一个索引

db.demo.dropIndex("age")

删除全部索引

db.demo.dropIndexes()

聚合

计算总和

db.demo.aggregate([{$group : {_id : "$name", num_tutorial : {$sum : "$age"}}}])

计算平均值

db.demo.aggregate([{$group : {_id : "$name", num_tutorial : {$avg : "$age"}}}])

获取集合中所有文档对应值得最小值

db.demo.aggregate([{$group : {_id : "$name", num_tutorial : {$min : "$age"}}}])

获取集合中所有文档对应值得最大值

db.demo.aggregate([{$group : {_id : "$name", num_tutorial : {$max : "$age"}}}])

自增

创建sequence、goods集合

db.createCollection("sequence")
db.sequence.insert({_id: "goods_id", sequence_value: 0})
db.createCollection("goods")

添加函数,通过原子操作获取sequence_value自增后的值

db.system.js.insert({
    "_id": "getNextSequenceValue",
    "value": function (sequenceName) {
        var sequenceDocument = db.sequence.findAndModify(
          {
             "query": {_id: sequenceName },
             "update": {$inc: {sequence_value: 1}},
             "new": true
          });
       return sequenceDocument.sequence_value;
    }
})

加载刚刚保存的脚本

db.loadServerScripts()

添加数据

db.goods.insertMany([
    {
        _id: getNextSequenceValue("goods_id"),
        "title": "手机"
    },
    {
        _id: getNextSequenceValue("goods_id"),
        "title": "台式电脑"
    },
    {
        _id: getNextSequenceValue("goods_id"),
        "title": "平板电脑"
    },
    {
        _id: getNextSequenceValue("goods_id"),
        "title": "台灯"
    },
    {
        _id: getNextSequenceValue("goods_id"),
        "title": "手表"
    }
])
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354