文档类型
例题
对于论坛帖子:(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