MongoDB常用命令

2019-03-12 22:13|来源: 网路

选择和创建数据库

选择和创建数据库的语法格式:

use 数据库名称


如果数据库存在则选择该数据库,如果数据库不存在则自动创建。以下语句创建commentdb数据库:

use commentdb

> use foobar
switched to db foobar


查看数据库:

show dbs


查看当前使用的数据库

> db
test



查看集合,需要先选择数据库之后,才能查看该数据库的集合:

show collections


插入文档

选择数据库后,使用集合来对文档进行操作,插入文档语法格式:

db.集合名称.insert(数据);

> post={"title":"领悟书生","content":"这是一个分享教程的网站","date":new Date()}
{
   "title" : "领悟书生",
   "content" : "这是一个分享教程的网站",
   "date" : ISODate("2016-06-06T09:38:08.995Z")
}
> db.blog.insert(post)
WriteResult({ "nInserted" : 1 })


查询文档

查询集合的语法格式:

db.集合名称.find()
db.集合名称.findOne()


查询一条记录

> db.blog.findOne()
{
   "_id" : ObjectId("5755448bfceaa7879cd4d48f"),
   "title" : "领悟书生",
   "content" : "这是一个分享教程的网站",
   "date" : ISODate("2016-06-06T09:38:08.995Z")
}


查找所有记录

> db.blog.find()
{ "_id" : ObjectId("5755448bfceaa7879cd4d48f"), "title" : "领悟书生", "content" : "这是一个分享教程的网站", "date" : ISODate("2016-06-06T09:38:08.995Z") }
>

发现文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段,MongoDB会自动创建,其类型是ObjectID类型。如果我们在插入文档记录时指定该字段也可以,其类型可以是ObjectID类型,也可以是MongoDB支持的任意类型。


根据条件查找,在json参数中传入对应的条件即可,如:

 db.blog.find({userid:'1013'})


返回指定条数的记录,可以在find方法后调用limit来返回结果,例如:

db.blog.find().limit(2)


修改文档

修改文档的语法结构:

db.集合名称.update(条件,修改后的数据)


update至少要有两个参数,一个是查询条件,第二个是新的文档对象

> db.blog.update({title:"领悟书生"},post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.blog.find()
{ "_id" : ObjectId("5755448bfceaa7879cd4d48f"), "title" : "领悟书生", "content" : "这是一个分享教程的网站", "date" : ISODate("2016-06-06T09:38:08.995Z"), "comments" : [ ] }
>


执行后发现,这条文档未更新的其它字段都不见了。

为了解决这个问题,我们需要使用修改器$set来实现,命令如下:

db.blog.update({title:"领悟书生"},{$set:{title:"领悟书生123"}})


删除文档

删除文档的语法结构:

db.集合名称.remove(条件)


以下语句可以将数据全部删除,慎用~

db.blog.remove({})


删除条件可以放到大括号中,例如删除title为领悟书生的数据,输入以下语句:

> db.blog.remove({title:"领悟书生"})
WriteResult({ "nRemoved" : 1 })
> db.blog.find()
>


统计条数

统计记录条件使用count()方法。以下语句统计spit集合的记录数:

db.comment.count()


按条件统计 ,例如统计userid为1013的记录条数:

db.comment.count({userid:"1013"})


模糊查询

MongoDB的模糊查询是通过正则表达式的方式实现的。格式为:

/模糊查询字符串/


查询评论内容包含“流量”的所有文档,代码如下:

db.comment.find({content:/流量/})


查询评论内容中以“加班”开头的,代码如下:

db.comment.find({content:/^加班/})


大于 小于 不等于

<, <=, >, >= 这个操作符也是很常用的,格式如下:

db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value

db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value

db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value

db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value

db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value


查询评论点赞数大于1000的记录:

db.comment.find({thumbup:{$gt:1000}})


包含与不包含

包含使用$in操作符

查询评论集合中userid字段包含1013和1014的文档:

db.comment.find({userid:{$in:["1013","1014"]}})


不包含使用$nin操作符

查询评论集合中userid字段不包含1013和1014的文档:

db.comment.find({userid:{$nin:["1013","1014"]}})


条件连接

我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联(相当于SQL的and)。格式为:

$and:[ {条件},{条件},{条件} ]


查询评论集合中thumbup大于等于1000 并且小于2000的文档:

db.comment.find({$and:[ {thumbup:{$gte:1000}} ,{thumbup:{$lt:2000} }]})


如果两个以上条件之间是或者的关系,我们使用操作符进行关联,与前面and的使用方式相同,格式为:

$or:[ {条件},{条件},{条件} ]


查询评论集合中userid为1013,或者点赞数小于2000的文档记录:

db.comment.find({$or:[ {userid:"1013"} ,{thumbup:{$lt:2000} }]})


列值增长

对某列值在原有值的基础上进行增加或减少,可以使用$inc运算符:

db.comment.update({_id:"2"},{$inc:{thumbup:1}})


相关问答

更多
  • mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mongodb:// 这是固定的格式,必须要指定。 username:password@ 这是可选的. 如果设置,在连接 数据库服务器之后,驱动都会尝试登陆这个数据库。 host1 是这个URI唯一要填写的。它指定了要连接 服务器的地址。 :portX 可选的指定 端口,如果不填,默认为27017 。 / ...
  • 用过echo加管道符将命令传入mongo的命令行 echo "db.serverStatus().mem" | mongo admin -u$user -p$pw 如果是多条命令 mongo admin -u$user -p$pw < 评论0 3 0 加载更多
  • 您好. #!/bin/sh mongo WordPress --eval "show collections;db.posts.find().limit(10);" show collections db.posts.find().limit(10) 如果还有问题,可以继续追问,感谢。
  • 用过echo加管道符将命令传入mongo的命令行 echo "db.serverStatus().mem" | mongo admin -u$user -p$pw 如果是多条命令 mongo admin -u$user -p$pw < 评论0 0 0 加载更多
  • Per @ Stennie的评论称,目前这是不可能的。 Per @Stennie's comment, this is not possible right now.
  • db.getLastErrorObj()是您要调用以获取更新结果的内容。 它返回一个看起来像这样的对象: { "updatedExisting" : true, "n" : 2, "connectionId" : 35, "err" : null, "ok" : 1 } n是更新文档的数量。 The db.getLastErrorObj() is what you want to call to get the result of the update. It re ...
  • 关键字“查询”在内部用于打包“查询”(查询的内容的指定)部分(请求服务器进行搜索)以使其在发送给服务器,但shell帮助程序(例如.explain)强制此“包装”发生在您指定的任何位置。 你正在失去你想要的查询(在这个查询中你直接使用“查询”),通过将它包含在“查询”本身中。 马特的回答通过解开预先包装的请求来避免这种情况,并且是这样做的正常方式......只需将“.explain()”添加到Matt重写的末尾,它应该按照您的预期工作。 如果你想保留你的格式,你可以像使用“$ orderby”而不是“.so ...
  • 您可以使用凭据初始化客户端,如下所示: $mongoClient = new \MongoDB\Client('mongodb://username:password@host1:port'); You may initialize the client with credentials as follows: $mongoClient = new \MongoDB\Client('mongodb://username:password@host1:port');
  • 是的,您将使用Last Error命令 ,但您需要设置fsync标志(和/或复制参数 ,具体取决于您对“safe”的定义): # force fsync > db.runCommand({getlasterror:1,fsync:true}) # wait for replication to one other server (w = 2) > db.runCommand( { getlasterror : 1 , w : 2 } ) 如果您正在进行多次写入,则可以在最后一次写入后请求fsync或复制 ...
  • 列出数据库尝试: function sd(){ return db._adminCommand( { listDatabases: 1 } ) } 基本上你必须在这里运行有效的JavaScript。 请记住,您必须在admin数据库的上下文中运行它们 - runCommand是不够的 - 您必须在此处使用_adminCommand。 有关其他命令,请参阅http://docs.mongodb.org/manual/reference/command/ 如果你想摆脱括号,还有一种方法(你必须将属 ...