7.MongoDB文档操作

分类栏目:MongoDB

资讯

MongoDB使用insert()或save()方法向集合中插入文档

db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.save(document)
save():如果_id主键存在则更新数据,如果不存在就插入数据。改方法已废弃可以使用insertOne()或replaceOne()来代替。
insert():若插入的数据主键已经存在,则会抛出DuplicateKeyException异常,提示主键重复。不保存当前数据。
 
3.2版本后新增了insertOne()和insertMany()函数用于向集合插入一个新文档或多个文档。
db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)
db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)
参数说明:
document:要写入的文档
writeConcern:写入策略,默认为1.即要求确认写操作,0是不要求。
ordered:指定是否按顺序写入,默认为true。
 

更新文档

update()方法:用于更新已存在的文档。
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
参数说明:
query:update的查询条件,类似sql update查询内where后面的条件。
update:update的对象和一些更新的操作符等,也可以理解为sql update查询内的set值
upsert:可选,这个参数的意思是,如果不存在update的记录是否插入改对象,true为插入,默认是false不插入
multi:可选,mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来的多条记录全部更新
writeConcern:可选,抛出异常的级别
 
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息
> db.col.find().pretty()
{
        "_id" : ObjectId("56064f89ade2f21f36b03136"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "菜鸟教程",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}

 

save()方法:通过传入的文档来替换已有文档,_id主键存在就更新,不存在就插入。
db.collection.save( <document>, { writeConcern: <document> } )
参数说明:
document:文档数据
writeConcern:可选,抛出异常的级别
db.col.save({
    "_id" : ObjectId("56064f89ade2f21f36b03136"),
    "title" : "MongoDB",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "Runoob",
    "url" : "http://www.runoob.com",
    "tags" : [
            "mongodb",
            "NoSQL"
    ],
    "likes" : 110
})

 

删除文档

remove函数用来移除集合中的数据
db.collection.remove(
   <query>,
   <justOne>
)
参数说明:
query:可选,删除的文档的条件
justOne:可选,如果设置为true或1,则只删除一个文档,如果不设置改参数或使用默认值false,则删除所有匹配的文档
writeConcern:可选,抛出异常的级别
 

删除所有的文档:

db.COLLECTION_NAME.remove({})
 
 

查询文档

find()方法:以非结构化的方式显示所有文档
db.collection.find(query, projection)
参数说明:
query:可选,使用查询操作符指定查询条件
projection:可选,使用投影操作符指定返回的键。查询时返回文档中所有键值,只需省略该参数即可默认省略
如果你需要以易读的方式来读取数据,可以使用pretty()方法:
db.col.find().pretty()
findOne()方法:它只返回一个文档。
 

MongoDB 与 RDBMS Where 语句比较

操作
格式
范例
RDBMS中的类似语句
等于
{:
}
db.col.find({"by":"菜鸟教程"}).pretty()
where by = '菜鸟教程'
小于
{:{$lt:}}
db.col.find({"likes":{$lt:50}}).pretty()
where likes < 50
小于或等于
{:{$lte:}}
db.col.find({"likes":{$lte:50}}).pretty()
where likes <= 50
大于
{:{$gt:}}
db.col.find({"likes":{$gt:50}}).pretty()
where likes > 50
大于或等于
{:{$gte:}}
db.col.find({"likes":{$gte:50}}).pretty()
where likes >= 50
不等于
{:{$ne:}}
db.col.find({"likes":{$ne:50}}).pretty()
where likes != 50

 

MongoDB AND 条件

MongoDB的find()方法可以传入多个键key,每个键以逗号隔开,即常规SQL的AND条件
>db.col.find({key1:value1, key2:value2}).pretty()

 

MongoDB OR 条件

mongoDB OR条件语句使用了关键字$or
>db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()