认识BSON
BSON是Binary JSON,语法和JSON很类似。在MongoDB里,使用BSON来存储信息,其结构如:
{
key1:value1,
key2:value2,
...
}
value本身可以是MongoDB的数据类型,也可以是一个BSON体(形成嵌套)。
插入/查看/更新文档
文档是一组(即若干对)键值对,也就是一个BSON结构体。和RDBMS比较,MongoDB中的文档就相当于RDBMS中的一个元组了。文档存放在集合中就如元组存放在表中。
向集合中插入文档
在指定的db下,使用
db.集合名.insert(BSON结构体形式的文档)
完成向该数据库中的指定集合插入一个文档。
例
> db.lzhCllctn1.insert({
... name:'刘知昊',
... age:21,
... height:183,
... weight:73,
... type:'sb',
... likes:['eating','coding','flora']
... })
WriteResult({ "nInserted" : 1 })
>
查看集合中的文档
在指定的db下,使用
db.集合名.find()
来查看该集合中的所有文档。
例
> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b2921a1731bfd60bffa814f"), "name" : "刘知昊", "age" : 21, "
height" : 183, "weight" : 73, "type" : "sb", "likes" : [ "eating", "coding", "fl
ora" ] }
>
可以看到MongoDB自动为它设置了一个_id
作为主键。
Update集合中的某些文档
在指定的DB下,使用
db.集合名.update(
{
更新条件
},
{
更新的具体内容
},
{
upsert: 无更新目标时是否插入,
multi: 是否更新全部,
writeConcern: 抛出异常的级别
}
)
来完成对指定集合中文档的更新。其中,最后一个BSON里的三个参数都是可选的,当三个参数都不使用时,要去掉这个BSON。
当upsert
为true时,若更新条件下匹配不到要更新的文档,则会插入这个文档。
当multi
为true时,MongoDB会更新满足更新条件的所有文档,而不是默认的仅第一条文档。
例
> db.lzhCllctn1.update(
... {
... age:21
... },
... {
... $set:{'name':'lzh'}
... },
... {
... multi:true
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b2921a1731bfd60bffa814f"), "name" : "lzh", "age" : 21, "hei
ght" : 183, "weight" : 73, "type" : "sb", "likes" : [ "eating", "coding", "flora
" ] }
>
因为只有这一条符合条件的文档,所以结果和
> db.lzhCllctn1.update(
... {
... age:21
... },
... {
... $set:{'name':'lzh'}
... }
... )
是一样的。
Save集合中的某些文档
在指定的DB下,使用
db.collection.save(
{
新文档的键值对组
},
{
writeConcern: 抛出异常的级别
}
)
来用传入的新文档替换相同_id
的文档。writeConcern
参数还是可选的。
例
> db.lzhCllctn1.save(
... {
... '_id':ObjectId("5b2921a1731bfd60bffa814f"),
... 'name':'SbLZHSbSbSb',
... 'age':'try to change type',
... tryadd:'try to add new k-v',
... height:138,
... type:'big sb'
... }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.lzhCllctn1.find()
{ "_id" : ObjectId("5b2921a1731bfd60bffa814f"), "name" : "SbLZHSbSbSb", "age" :
"try to change type", "tryadd" : "try to add new k-v", "height" : 138, "type" :
"big sb" }
>
可以看到,给key加不加引号都行,而且在MongoDB对文档的修改操作中,即使改了原来value的数据类型,甚至新增或删除某些K-V,都是没问题的。
格式化显示BSON
使用
返回BSON的函数.pretty()
能将返回的BSON格式化显示。
例
> db.lzhCllctn1.find().pretty()
{
"_id" : ObjectId("5b2921a1731bfd60bffa814f"),
"name" : "SbLZHSbSbSb",
"age" : "try to change type",
"tryadd" : "try to add new k-v",
"height" : 138,
"type" : "big sb"
}
>
这样看起来就清楚多了。