1. update 更新文档
1.1multi 查询多条
> db.user.update({age: 1}, {$set:{home: 'beijing'}}, {multi: true})
multi 更新所有
$unset 取消设置
> db.user.update({age: 1}, {$unset:{home: 'beijing'}}, {multi: true})
upsert 没有就新建
> db.user.update({name: 'stylus'}, {$set: {age: 2}})
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0 })
若是没有找到,插入失败。
没有就新建:
> db.user.update({name: 'stylus'}, {$set: {age: 2}}, {upsert: true})
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5c1f91b928bd4b05b07bbb85")
})
$addToSet 添加值到一个数组中去,如果数组中已经存在该值那么将不会有任何的操作
> db.user.update({age: 2}, {$addToSet: {name: 'new'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
{ "_id" : ObjectId("5c1f914f28bd4b05b07bbb80"), "age" : 2, "name" : [ "new" ] }
$each
修饰符允许$addToSet操作符添加多个元素到数组字段中
> db.user.update({age: 2}, {$addToSet: {name: {$each: ['js', 'node']}}})
{ "_id" : ObjectId("5c1f914f28bd4b05b07bbb80"), "age" : 2, "name" : [ "new", "js", "node" ] }
$pop 删除数组最后一个元素
> db.user.update({age: 2}, {$pop: {name: 1}})
runCommand 执行js文件
1. mongo xx.js
var command = {
// 要操作的集合
findAndModify: 'user',
// 查询条件
query: {name: 'less'},
// 指定如何更新
update: {$inc: {age: 1}},
// 指定返回的字段
fields: {name: true, age: true, _id: false},
// 排序,默认正序
sort: {age: 1},
// 返回更新后的文档
new: true
}
var db = connect('test')
var result = db.runCommand(command)
printjson(result)
> mongo 1.run.js
MongoDB shell version v3.4.3
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.3
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.3
{
"lastErrorObject" : {
"updatedExisting" : true,
"n" : 1
},
"value" : {
"name" : "less",
"age" : 2
},
"ok" : 1
}
2. mongo shell 中运行load(‘xx.js’)
> load('./1.run.js')
connecting to: mongodb://127.0.0.1:27017/test
MongoDB server version: 3.4.3
{
"lastErrorObject" : {
"updatedExisting" : true,
"n" : 1
},
"value" : {
"name" : "less",
"age" : 3
},
"ok" : 1
}
true
remove 删除文档
db.user.remove({})
justOne 只删一条
db.user.remove({}, {justOne: true})
find 查询文档
第二个参数,指定返回字段
> db.user.find({}, {name: 1, _id: 0})
{ "name" : "jake" }
{ "name" : "jee" }
...
findOne 只查询一条
> db.user.findOne()
$in操作符输出数据库中特定字段的值等于指定数组中某一个值的文档
> db.user.find({age: {$in:[1, 2]}}, {_id: 0, name: 0})
{ "age" : 1 }
{ "age" : 2 }
n i n 与 nin 与 nin与in 相反
$not 取反
> db.user.find({age: {$not: {$gte: 10}}})
{ "_id" : ObjectId("58e7090250fd893b8493b755"), "name" : "less", "age" : 4 }
{ "_id" : ObjectId("5c1f8eb2570de4922b5faa23"), "name" : "scss", "age" : 1 }
{ "_id" : ObjectId("5c1f91b928bd4b05b07bbb85"), "name" : "stylus", "age" : 2 }
$ge >, $gte >=, $lt <, $lte <= 条件操作
$all (且关系)查询数组中匹配的字段
> db.user.find({favourite: {$all: ['tea']}})
$size 数组长度
> db.user.find({favourite: {$size: 2}})
$slice 截取数组长度
> db.user.find({favourite: {$size: 2}}, {'favourite': {$slice: 1}})
$where 条件
> db.user.find({$where: 'this.age<10'})
cursor 游标
var db = connect('test')
var cursor = db.user.find()
while(cursor.hasNext()) {
var record = cursor.next()
printjson(record)
}
$or 或
> db.user.find({$or: [{name: 'less'}, {name: 'scss'}]})
skip() 跳过几条数据
> db.user.find({}).skip(2)
limit() 取几条数据
> db.user.find({}).limit(2)
ObjectId构成
MySQL等关系型数据库,主键是自增的。MongoDB采用称为ObjectId的类型来做主键。ObjectId是一个12字节的BSON类型字符串。
- 4字节 UNIX时间戳
- 3字节:运行MongoDB的机器
- 生成此id的进程
- 有一个随机数开始的计数器生成的值