mongodb 怎么执行sql

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb 怎么执行sql相关的知识,希望对你有一定的参考价值。

    交互式 mongo shell

    mongo 127.0.0.1:27017

    use test

    db.users.findOne()

    mongo --eval 运行一段脚本

    mongo 127.0.0.1:27017/test --eval "printjson(db.users.findOne())"

    在OS命令行下,运行一个js文件

    mongo 127.0.0.1:27017/test userfindone.js

    userfindone.js 的内容:

    printjson(db.users.findOne());

    在mongo shell 交互模式下,运行一个js文件

    mongo test

    load("/root/mongojs/userfindone.js")

    load() 参数中的文件路径,既可以是相对路径,也可以是绝对路径。

    在mongo shell下查看当前工作路径的方法: pwd( )

    当前工作路径就是我们启动mongo shell时,当前用户所处的路径。

    例如:

    [root@cgl-centos-dev mongojs]# pwd

    /root/mongojs

    [root@cgl-centos-dev mongojs]# mongo

    MongoDB shell version: 2.6.12

    connecting to: test

    > pwd()

    /root/mongojs

    >

    MongoDB 查询数据的语法格式如下:

    db.collection.find(query, projection)

    query :可选,使用查询操作符指定查询条件

    projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:>db.col.find().pretty()

    pretty() 方法以格式化的方式来显示所有文档

    以下实例我们查询了集合 col 中的数据:

    > db.col.find().pretty()
    "_id" : ObjectId("56063f17ade2f21f36b03133"),
    "title" : "MongoDB 教程",
    "description" : "MongoDB 是一个 Nosql 数据库",
    "by" : "菜鸟教程",
    "url" : "http://www.runoob.com",
    "tags" : [
    "mongodb",
    "database",
    "NoSQL"
    ],
    "likes" : 100

    除了 find() 方法之外,还有一个 findOne() 方法,它只返回一个文档。

参考技术A Query.Matches("Title", str);//模糊查询 相当于sql中like -- str可包含正则表达式如果你是编程,那使用相应的数据库驱动也包含相应的模糊查询方法。 参考技术B 那不叫sql,叫查询语句,也就是javascript代码,打开命令行,输入mongo,教程https://docs.mongodb.com/manual/crud/本回答被提问者采纳

如何在 MongoDB 中执行此 Sql 查询

【中文标题】如何在 MongoDB 中执行此 Sql 查询【英文标题】:How to do this Sql query in MongoDB 【发布时间】:2013-08-14 10:29:35 【问题描述】:

我有两个集合:用户和通知。 我需要获取所有管理员用户的通知列表

我来自 sql 上下文。所以在 mssql 中我能够做到:

SELECT notificationId, notificationText  FROM notifications 
WHERE username IN (select username from users where userrole = 'admin');

我在 mongodb 中尝试了以下操作:

db.notificaitons.find( username: $in:/*get list of admin users here*/ , 
notificationId: 1, notificationText: 1)

有没有办法在单个数据库查询中做到这一点?还是我应该在两个不同的查询中进行。 (我正在使用带有猫鼬的节点 js)

我无法真正理解逻辑。谢谢。

【问题讨论】:

它需要两个查询。一个用于管理员,第二个用于通知。如果可能和必要,缓存管理员列表。 为了能够将其作为单个查询进行,您需要将要查询的数据与通知一起存储,因此在这种情况下可能是用户角色和名称。然后您可以进行如下查询:db.notificaitons.find( userrole: "admin" , notificationId: 1, notificationText: 1) 很好的答案,但是... 答案应该以 answers 的形式发布,而不是 cmets。 【参考方案1】:

您需要两个查询,或修改您的架构。我建议您在通知集合中不仅存储username,还存储userrole


   username: "derickr",
   userroles: [ "admin", "newbie" ].
   notificationId: 42,
   notificationText: "This is awesome",

如您所见,我将 userroles 设为一个数组,具有多个用户角色 - 我规定这也是您所拥有的。现在可以通过以下方式轻松查询管理员用户的所有通知:

// create index
db.notifications.ensureIndex(  userroles: 1   );

// do query
db.notifications.find(  userroles: "admin"  );

【讨论】:

以上是关于mongodb 怎么执行sql的主要内容,如果未能解决你的问题,请参考以下文章

C++或C中怎么通过代码执行mongodb中的命令行,把执行结果带回。

window怎么安装mongodb

php 怎么进入mongodb

mongoDB 以微秒为单位获取查询的执行时间

linux mongodb 怎么使用

linux怎么连接mongodb数据库