知识点
软件工具
相关文章
更多最近更新
更多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的 shell怎么 连接远程 服务器上的mongodb啊?[2023-09-21]
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] mongodb:// 这是固定的格式,必须要指定。 username:password@ 这是可选的. 如果设置,在连接 数据库服务器之后,驱动都会尝试登陆这个数据库。 host1 是这个URI唯一要填写的。它指定了要连接 服务器的地址。 :portX 可选的指定 端口,如果不填,默认为27017 。 / ... -
如何通过shell脚本操作MongoDB[2022-06-24]
用过echo加管道符将命令传入mongo的命令行 echo "db.serverStatus().mem" | mongo admin -u$user -p$pw 如果是多条命令 mongo admin -u$user -p$pw < 评论0 3 0 加载更多 -
如何通过shell脚本操作MongoDB[2023-11-25]
您好. #!/bin/sh mongo WordPress --eval "show collections;db.posts.find().limit(10);" show collections db.posts.find().limit(10) 如果还有问题,可以继续追问,感谢。 -
如何通过shell脚本操作MongoDB[2022-06-07]
用过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/ 如果你想摆脱括号,还有一种方法(你必须将属 ...