基础命令

来源:互联网 发布:消防楼梯送风编程 编辑:程序博客网 时间: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,&gt  :6 } } )  —-区间  
            &gte   &gt   &lte    &lt   
db.users.find( { status: {
in: [ “P”, “D” ] } } ) —-枚举
&in &nin
db.users.find( { status: {$not:”A”}} )

$mod

逻辑    db.users.find( { status: { $lt:  3,&gt  :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” },
{ set:"favorites.food":"pizza",type:0,,currentDate: { lastModified: true }},
{ 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)

原创粉丝点击