mongo command oprate

操作命令

  • use DATABASE_NAME 转换数据库,没有责创建数据库

  • show dbs : 显示所有数据库

  • db 查看当前数据库

用户

  • 创建用户,权限管理
1
2
3
4
5
6
7
db.createUser(
... {
... user: "dba",
... pwd: "dba",
... roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
... }
... )
  • 用户登录db.auth('liu','123')

  • show users 查看当前库下的用户

  • db.system.users.find().pretty() 查看所有的用户

集合

  • db.createCollection(name, options) 创建集合

  • show collectionsshow tables 查看已有集合

  • db.abc.insert({"a":1,"b":2}) abc是集合名,插入数据

  • db.COLLECTION_NAME.drop() 删除集合

文档

  • db.COLLECTION_NAME.insert(document) 主键已经存在,则会抛异常

  • db.collection.insertOne()/replaceOne() 如果 _id 主键存在则更新数据,如果不存在就插入数据

  • db.abc.find() 展示查看abc集合内的文档

  • db.col.update({'title':'delete data'},{$set:{'title':'mongod'}}) 更新文档

  • db.col.update({'title':'delete data'},{$set:{'title':'mongod'}},{multi:true})更新多个文档

  • db.col.remove({'title':'delete data'}) 删除文档

  • db.COLLECTION_NAME.remove(DELETION_CRITERIA,1) 删除一个

  • db.col.find().pretty() 查询并美化数据

  • db.col.find({"likes": {$gt:50}, $or: [{"by": "mongod"},{"title": "something"}]}).pretty() 联合查询

egg-mongodb

Schema 配置

1
2
3
4
new Schema({..}, options);
// 或
var schema = new Schema({..});
schema.set(option, value);
  • collection: 默认的collection名称是model的复数形式,上边说过,在这里也可以自定义

  • id: 默认true,Mongoose会默认生成一个虚拟值id,指向数据库的_id,但会转成字符串返回

  • minimize: Mongoose默认不保存空对象,若该项设为false将保存空对象

  • strict:默认为true,不能保存schema里没有声明的属性

  • toJSON: 对获取的数据进行转换, 比如时区转换或Decimal128类型转为string,就可以使用toJSON来完成

  • versionKey:版本锁设置在每一个文档(document)上,由mogoose生成。默认的值是__v,但是可以自定义

  • timestamps:会自动生成createdAt和updatedAt,还可以自定义名字

mongo SchemaTypes

  • String

  • Number

  • Date

  • Buffer

  • Boolean

  • Mixed

  • ObjectId

  • Array

  • Decimal128

egg-mongodb 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
// 获取所有数据,返回是一个数组
ctx.model.User.find()


// 获取一个数据,返回是一个对象
ctx.model.User.findOne()


// 根据具体数据进行查询
ctx.model.User.find({ _id: '5ba05c89b1f3b6355e1d635e', name: 'Alioth' });


// 条件查询
// "$lt" 小于
// "$lte" 小于等于
// "$gt" 大于
// "$gte" 大于等于
// "$ne" 不等于
ctx.model.User.find({ create_at: { $gte: new Date(2019, 7, 5), $lte: new Date(2019, 7, 6) } })


// 或查询 OR
// "$in" 一个键对应多个值
// "$nin" 同上取反, 一个键不对应指定值
// "$or" 多个条件匹配, 可以嵌套 $in 使用
// "$not" 同上取反, 查询与特定模式不匹配的文档
ctx.model.User.find({ name: { $in: ['Alioth', 'Jodie'] } });
ctx.model.User.find({ $or: [{ _id: '5ba05c89b1f3b6355e1d635e' }, { name: 'Alioth' }] });


// 类型查询("$exists"条件判定)
ctx.model.User.find({ name: { $exists: true } }, function (error, docs) {
//返回表中所有存在name属性的结果
});
ctx.model.User.find({ name: { $exists: false } }, function (error, docs) {
//返回表中所有不存在name属性的结果
});


// 匹配正则表达式查询
ctx.model.User.find({ name: /Alioth/i }); // 返回表中name为 Alioth 的结果, 并忽略大小写


// 查询数组
ctx.model.User.find({ array: 10 }); // 返回表中array(数组类型)键中有10的文档, array : [1,2,3,4,5,10] 会匹配到
ctx.model.User.find({ 'array[5]': 10 }); // 返回表中array(数组类型)键中下标5对应的值是10, array : [1,2,3,4,5,10] 会匹配到
ctx.model.User.find({ array: [5, 10] }); // 返回表中查询匹配array数组中既有5又有10的结果
ctx.model.User.find({ array: { $size: 3 } }); // 返回表中查询匹配array数组长度为3 的的结果
ctx.model.User.find({ array: { $slice: 10 } }); // 返回表中查询匹配array数组的前10个元素
ctx.model.User.find({ array: { $slice: [5, 10] } }); // 返回表中查询匹配array数组的第5个到第10个元素


// where
// 用它可以执行任意javacript语句作为查询的一部分,如果回调函数返回 true 文档就作为结果的一部分返回
// 其中this为数据表中的数据,上述返回表中属性x+属性y=10的所有数据
ctx.model.User.find({ $where: 'this.x + this.y === 10' });
ctx.model.User.find({ $where: 'function(){ return this.x + this.y ===10; }' })


// 删除数据,conditions为查询条件,与查询数据介绍的一样,callback为操作成功后的回调函数
ctx.model.User.remove(conditions, callback);


// 更新数据, 参数1:查询条件, 参数2:更新对象
ctx.model.User.update(conditions, update, callback);


// 查询表中特定_id,并对data中所包含的属性进行更新。
let data = { name: 'ddd' }
ctx.model.User.update({ _id: '5ef58218f50e85f5a618749b' }, data)


// "$inc"增减修改器,只对数字有效,找到age=22的文档,修改文档的age值自增1
ctx.model.User.update({ "age": 22 }, { $inc: { "age": 1 } });


// '$set' 指定一个键的值,这个键不存在就创建它.例:软删除,找到特定_id数据,增加或者修改isDelete属性
ctx.model.User.update({ _id: '5ef58218f50e85f5a618749b' }, { $set: { isDelete: true } });


// "$unset"删除一个键,执行后create_at键不存在
ctx.model.User.update({ create_at: new Date(2019, 7, 5) }, { $unset: { create_at: '' } });


// 对表中的数据进行排序,先按'isSetTop'降序,再按'sort'升序,最后按'editTime'降序, 1升序, -1降序。
ctx.model.User.sort({ isSetTop: -1, sort: 1, editTime: -1 });


// 限制返回结果的数量, 返回为前面3条数据
ctx.model.User.limit(3);


// 跳过前3个文档,返回其余
ctx.model.User.skip(3);

// 分页查询

// 其中pageSize和pageNum为动态传递数据,返回Article表中特定_id在每页数据为pageSize条件下的第pageNum页中的数据,并按照“isSetTop”降序,再按“sort”升序,最后按“editTime”降序进行排序。
ctx.model.User.find({ _id: '5ba05c89b1f3b6355e1d635e' }).skip(pageSize * (pageNum - 1)).limit(parseInt(pageSize)).sort({ isSetTop: -1, sort: 1, editTime: -1 });
返回
顶部