文档类型
例题
对于论坛帖子:(id, 标题,内容,创建时间,浏览次数,回复条数,跟帖(嵌套文档:[{用户名、回复内容、时间},......]))
插入语句:
db.posts.insertOne(
{
title:'mongodb真好',
content:'mongodn真好',
addtime:new Date(),
username:'郑',
pageviewnum:0,
reviewnum:0,
}
)
浏览不回复:
db.posts.updateOne(
{
title:'mongodb真好'
},
{
$inc:{
pageviewnum:1
}
}
);
回复title为“mongodb真好”的帖子
db.posts.updateOne(
{
title:'mongodb真好'
},
{
$inc : {
pageviewnum : 1,
reviewnum : 1
},
$push : {
reviewlogs : {
uname : '小明',
ucontent : '确实',
uaddtime : new Date()
}
}
}
)
数组操作
$pop
用于删除数组元素,仅限数组首尾。
$pop
参数为-1:弹出第一个元素$pop
参数为:弹出最后一个元素
eg:删除“mongodb真好”帖子的第一条回复
db.posts.updateOne(
{title:'mongodb真好'},
{
$pop : {
reviewlogs : 1
},
$inc : {
reviewnum : -1
}
}
)
$pull
和pullAll
用于删除数组匹配的元素
$pull
:删除数组匹配的第一个元素$pullAll
:删除数组中多个匹配的子元素
eg1:删除'mongodb真好'帖子的1@126.com邮箱
db.posts.updateOne(
{
title:'mongodb真好'
},
{
$pull : {
emails : '1@126.com'
}
}
)
eg2:删除'mongodb真好'帖子的4@126.com和5@126.com邮箱
db.posts.updateOne(
{
title:'mongodb真好'
},
{
$pullAll : {
emails : ['4@126.com','5@126.com']
}
}
)
$ 数组占位符
eg:将“mongodb真好”的帖子的“8@126.com”邮箱改成“81@126.com”
db.posts.updateOne(
{
title:'mongodb真好',
"emails.$":'8@126.com'
},
{
$set : {
"emails.$":'81@126.com'
}
}
)
数组占位符的使用注意事项
- $符作为占位符只能占一层,不能占多层。
- 必须使用引号标注被修改部分或修改结果(
"emails.$"
)。
删除文档
删除文档有两种方法:deleteOne
和deleteMany
deleteOne
:删除匹配查询条件的第一个文档deleteMany
:删除匹配查询条件的所有文档
两种方法都只包含查询条件一个部分。
eg:
对于集合:inventory:
db.inventory.insertMany( [
{ item: "journal", qty: 25, status: "A" },
{ item: "notebook", qty: 50, status: "P" },
{ item: "paper", qty: 100, status: "D" },
{ item: "planner", qty: 75, status: "D" },
{ item: "postcard", qty: 45, status: "A" },
] );
deleteOne
删除第一个status字段为D的文档:
db.inventory.deleteOne(
{
status:'D'
}
)
会删除掉paper文档。
如果deleteOne不指定查询条件:
db.inventory.deleteOne(
{}
)
会删除第一条文档。
deleteMany
删除所有status字段为A的文档:
db.inventory.deleteMany(
{
status:'A'
}
)
会删除掉journal和postcard字段。
如果deleteMany不指定查询条件:
db.inventory.deletemany(
{}
)
会删除集合中的所有文档。
save
仅包含一个文档。
当输入文档中不包括id时,执行插入操作。
插入的文档将创建_id。
eg1:
db.products.save(
{
item: "book",
qty: 40
}
)
文档中不包含id,所以执行插入操作。插入后会生成一个id值。
eg2:
db.products.save(
{
_id:100,
item:'water',
qty:30
}
)
此时文档中包含id字段,save
执行的操作等同于upsert:true
时的update
操作。
当集合中不包含该id的文档时,插入上面的文档:
{ "_id" : 100, "item" : "water", "qty" : 30 }
当集合中已含有该id的文档时,则更新该文档。
如,有以下文档:{ "_id" : 100, "item" : "water", "qty" : 30 }
执行以下操作:
db.products.save( { _id : 100, item : "juice" } )
则文档更新为:
{ "_id" : 100, "item" : "juice" }
Comments | NOTHING