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() 方法,它只返回一个文档。
如何在 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的主要内容,如果未能解决你的问题,请参考以下文章