基础命令
来源:互联网 发布:消防楼梯送风编程 编辑:程序博客网 时间:2024/06/05 16:49
1.0新增
1.1 新增-文档
可以批量/单个插入db.PersonT.insert([{name:"lijun",age:26},{name:"gougou",age:2}])db.PersonT.insert({name:"lijun",age:26})如果要插入的json没有_id属性,数据库则会自动生成ObjectID类型的id ( 删除:delete obj._id ; 而不是 _id:null )插入的时候如果没有相应的集合,则会自动生成
1.2 新增–顶层文档属性
$set
如果该属性不存在,则会添加
1.3 新增–数组元素添加
addToSet
db.Jet.update({ _id: 1 },{ addToSet: { tags: “camera” } })
//数组不存在会被创建
db.Jet.update({ _id: 1 },{addToSet: { tags: “camera” } })
//已存在的不会添加
db.Jet.update({ _id: 1 },
{ addToSet: { tags: {each: [ “electronics”, “accessories” ] } } })
//批量添加
push
已存在可以继续插入,可以添加sort position slice
其他的都和addToSet一样
2.0删除
2.1 文档–drop/remove不可恢复
删除都是不可恢复的
remove 指定(全部匹配)/全部删除 但是不会删除索引 db.PersonT.remove({"name":"lijun"})drop 完全删除 db.PersonT.drop()
2.2 属性–unset
unsetdb.getCollection('students').update({},{$unset:{name:null}}):null 写什么都是删除
2.3 数组–pop/pullAll
pop
db.Jet.update( { _id: 1 }, { $pop: { tags: 1 } } )
//移除指定数组的头部或者尾部元素
//1移除最后一个 -1第一个
//没有了也不会报错 只是空数组
pullAll
删除指定数组中的交集数据/filter默认是多个
{ _id: 1, scores: [ 0, 2, 5, 5, 1, 0 ] }
db.survey.update( { _id: 1 }, { $pullAll: { scores: [ 0, 5 ] } } )
{ “_id” : 1, “scores” : [ 2, 1 ] }
pull 删除数组中的交集数据/multi默认是单个
3.0查询
3.0 结果集–sort/属性/分页/size
count/size/skip/limit
db.person.find({}).skip(2).limit(2)
db.person.find({}).size()
skip() 跳过前面几个
limit() 获取几个
size() 本次查询的最终结果集大小
count(1) 同上
count() 原始
sort
db.person.find().sort({KEY:1})
其中 1 为升序排列,而-1是用于降序排列。
指定结果集
–返回指定的文档键值对。
下面的示例将只是返回name和age键值对。
db.test.find({}, {“name”:1,”age”:1})
{ “_id” : ObjectId(“4fd58ecbb9ac507e96276f1a”), “name” : “stephen”, “age” : 35 }
指定不返回的文档键值对。下面的示例将返回除name之外的所有键值对。
db.test.find({}, {“name”:0})
{ “_id” : ObjectId(“4fd58ecbb9ac507e96276f1a”), “age” : 35, “genda” : “male”, “email” : “stephen@hotmail.com” }
3.1 属性–比较/逻辑/null/date/正则/type
比较
db.users.find( { status: “P”} )
直接写就是相等 要注意数据类型
db.users.find( { status: { ne: “P” } } )—-相等/不相等
&eq &ne
db.users.find( { status: {lt: 3 } } )
db.users.find( { status: { lt: 3,> :6 } } ) —-区间
>e > <e <
db.users.find( { status: {in: [ “P”, “D” ] } } ) —-枚举
&in &nin
db.users.find( { status: {$not:”A”}} )
非
$mod
逻辑 db.users.find( { status: { $lt: 3,> :6 } } ) ---- 指定属性 AND db.users.find( { status: "A",age: { $lt: 30 } } ) ----多属性 AND db.users.find( {$and :[{ status: "A"},{age: { $lt: 30 }} ]} ) ---多属性 标准写法 and 全部满足
nor 没有一个
or 0个以上
null/没有
db.test.find({“x”:null})
{ “_id” : ObjectId(“4fd59d30b9ac507e96276f1b”), “x” : null }
{ “_id” : ObjectId(“4fd59d49b9ac507e96276f1c”) }
值为null,以及不包含指定键
exists
db.test.find({“x”: {“exists”:true}})exists:1/true 存在
exists:0/false 不存在
查找值为null的
db.test.find({“x”: {“in": [null], "$exists”:true}})
时间
处理时区问题最好先让window(浏览器/eclipse),mongoDB保证时间都为UTC
db.serverStatus(),查询mongo状态
java中插入
java.util.Date会自动转换成UTC的ISODate(“2007-03-02T16:00:00Z”)
查询也使用util.Date
{ “date” : { “gte" : { "date” : “2012-05-17T08:14:15.000Z”}}}
shell中查询
db.products.find({“date”: {“$gte”: new ISODate(“2012-05-17 08:14:15.656”)}});
正则
针对字符串
{ name: /acme.*corp/i }
i 忽略大小写
m 全文查找 换行
取反 {author:{not:/amazon/i}}
类型
db.users.find( { name : {type: 10 } } )
Double1 1 double
String 2 string
Array 4 array
Undefined 6 undefined 弃用
ObjectId 7 objectId
Boolean 8 “bool”
Date 9 “date”
Null 10 “null”
32-bit integer 16 “int”
Timestamp 17 “timestamp”
64-bit integer 18 “long”
http://www.cnblogs.com/Khadron/p/MongoDB_Note_1.htmlwhere
全表将转化为一个js对象 很慢不建议使用
建议先过滤一次
db.getCollection(‘users’).find(function(){if(this.favorites.food==”cake”){return true;}})
文档查询
要建立全文索引
地理位置
地理
3.2 数组元素–包含/区间/size
包含
db.users.find( { “badges”: “black” } )
包含
db.users.find( { badges: [ “blue”, “black” ] } )
严格包含 全部内容+顺序
db.users.find( { badges: {all: [ “blue”, “black” ]} } )
全部包含即可,就是满足内部条件 相当于and的变形
db.inventory.find( { qty: {
all: [{ "elemMatch" : { size: "M", num: { gt: 50} } },
{ “elemMatch” : { num : 100, color: “green” } } ] }} )
db.users.find( { “badges.0”: “black” } )
指定序号
区间匹配
db.users.find( { finished: { elemMatch: {gt: 15, lt: 20 } } } )
至少有一个元素同时满足全部条件
特别注意 db.users.find( { finished: {gt: 15, $lt: 20 } } ) 分开满足和单个同时满足都可
size
db.getCollection(‘users’).find({badges:{$size:0}})
必须是明确的数字 不能大于小于
3.3 查询–内置文档
属性条件
db.users.find( { favorites: { artist: “Picasso”, food: “pizza” } } )
db.users.find( { “favorites.artist”: “Picasso” } )
db.users.find( { ‘points.points’: { $lte: 55 } } )
db.users.find( { ‘points.0.point’: { $lte: 55 } } )
db.users.find( { points: { $elemMatch: { point: { $lte: 70 }, bonus: 20 } } } )
至少有一个元素同时满足全部条件
,区别于db.users.find( { “points.point”: { $lte: 70 }, “points.bonus”: 20 } )
projection
db.users.find( { status: “A” }, { name: 1, status: 1,”favorites.food”: 1} )
4.3 查询–文档数组
db.users.find( { ‘points.points’: { $lte: 55 } } )
db.users.find( { “points.points”: { $lte: 70 }, “points.bonus”: 20 } )
db.users.find( { points: { elemMatch: { points: {lte: 70 }, bonus: 20 } } } )
db.users.find( { status: “A” }, { name: 1, status: 1, “points.bonus”: 1 } )
4.0修改
4.1 文档修改
文档替换
文档修改
update vs save
save 有重复就替换,没有重复就保存
update (推荐) 功能强大
update
db.users.update({criterion,objNew,upset,multi)
criterion:查询
objNew:修改
upset:如果没有查询结果,是否讲修改插入,默认false
multi:是否批量修改,默认false
db.users.update({ name: “xyz” },{ name: “mee”, age: 25, type: 1, status: “A”})
4.2 属性–set/inc
{set :{name:”11”}}
设置为具体的值
set null 或者”” 值就是null 或者””
{inc : {age : 5 }}
对数字属性添加指定
不存在会自动创建
db.users.update(
{ “favorites.artist”: “Picasso” },
{
{ multi: true }
// multi属性表示符合的数据全部修改
4.3 数组–$ set /sort/push/addToSet
{$push : {nick:"jun"}} 向指定数组中添加一个元素, 如果指定数组不存在,将创建一个这个数组;不能对非数组属性使用{$pushAll : {nick:["jun","ll"]}} 向指定数组中添加多个元素, 如果指定数组不存在,将创建一个这个数组;不能对非数组属性使用{$addToSet : {nick4:"jun"}} 向指定数组中添加一个元素,如果该元素已经存在,则无法添加 如果指定数组不存在,将创建一个这个数组;不能对非数组属性使用
$匹配符 有缺陷 是第一个
{ “_id” : 1, “grades” : [ 80, 80, 90 ] }
{ “_id” : 2, “grades” : [ 80, 90, 92 ] }
db.students.update({ grades: 80 },{ set: { "grades.” : 82 } },{multi:true})
{ “_id” : 1, “grades” : [ 82, 80, 90 ] }
{ “_id” : 2, “grades” : [ 82, 90, 92 ] }
sort/slice/position
sort
配合其他
{ “_id” : 2, “tests” : [ 89, 70, 89, 50 ] }
db.students.update({ _id: 2 }, { push: { tests: {each: [ 40, 60 ], $sort: 1 } } })
{ “_id” : 2, “tests” : [ 40, 50, 60, 70, 89, 89 ] }
db.students.update({ _id: 3 },{ push: { tests: {each: [ ], $sort: -1 } } })
slice
db.students.update(
{ _id: 3 },
{
push: {
scores: {each: [ ],
$slice: -3
}
}
}
)
position
{ “_id” : 1, “scores” : [ 50, 60, 70, 100 ] }
db.students.update(
{ _id: 1 },
{
push: {
scores: {each: [ 20, 30 ],
$position: 2
}
}
}
)
{ “_id” : 1, “scores” : [ 50, 60, 20, 30, 70, 100 ] }
4.4 修改–内置文档
文档设置
db.product.update(
{ _id: 100 },
{ $set: { “details.model”: “zzz” } }
)
db.products.update(
{ _id: 100 },
{ $set:
{
“tags.1”: “rain gear”,
“ratings.0.rating”: 2
}
}
)
4.4 文档数组
$ 匹配第一个
{ _id: 4,
grades: [
{ grade: 80, mean: 75, std: 8 },
{ grade: 85, mean: 90, std: 5 },
{ grade: 90, mean: 85, std: 3 }
]
}
db.students.update(
{ _id: 4, “grades.grade”: 85 },
{ set: { "grades..std” : 6 } }
)
5.0结构
不需要显示的创建collection属性名修改
update({},{$rename:{nick4:”nick5”}},false,false)
- 基础命令
- 基础命令
- 基础命令
- 基础命令
- 基础命令
- 基础命令
- linux基础命令--解压缩命令
- Ubantu基础操作,基础命令
- ubuntu基础操作,基础命令
- 【Linux基础】基础shell命令
- 基础网络命令
- 网络安全基础命令
- [转载]DOS命令基础
- Linux基础命令集
- 基础网络命令
- DOS 基础命令
- Emacs基础命令整理
- DOS 基础命令
- luogu1001 A+B Problem
- 201703-2 学生排队
- kali安装chrome浏览器,root用户不能打开的问题
- shell脚本中sed的使用详解
- [JSOI2008]星球大战
- 基础命令
- Java继承:子类和父类创建对象的顺序问题。
- Kotlin学习(1):Kotlin简介
- 快餐库
- noip提高组1999 导弹拦截
- 20170910WindowsPrj04_第三方库学习方式
- 求直方图中最大矩形面积
- SGISTL源码探究-vector容器(下)
- 聚合