MongoDB where

MongoDB where

MongoDB 中,我们使用 find 查询记录时,还可以使用 where 字句,$where 操作符功能强大且灵活,它可以将 JavaScript 表达式的字符串或 JavaScript 函数作为查询语句的一部分。

在 JavaScript 表达式和函数中,可以使用 this 或 obj 来引用当前操作的文档。 JavaScript 表达式或函数返回值为 true 时,才会返回当前的文档。

查询时,$where 操作符不能使用索引,每个文档需要从 BSON 对象转换成 JavaSript 对象后,才可以通过 $where 表达式来运行。因此,它比常规查询要慢很多,一般情况下,要避免使用 $where 查询。

MongoDB where详解

语法

db_name.collection_name.find({$where:function() {}})

参数

参数 描述
db_name 数据库名
collection_name 集合名

说明

使用 where 查询记录时,在 function 中写具体的逻辑。

案例

我们首先,使用 mongo 命令,连接上数据库,具体命令如下:

mongo

如下图所示:

108_mongodb where.png

现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:

use haicoder

现在,我们使用 insertMany 插入三条记录,具体命令如下:

db.haicoder.insertMany([{"name":"haicoder", "url":"haicoder.net"}, {"name":"mhaicoder", "url":"m.haicoder.net"}, {"name":"notfound", "url":404}])

执行完毕后,此时,如下图所示:

109_mongodb where.png

我们看到,此时提示我们成功插入了三条记录,现在,我们使用 find 加上 where 进行查询,查询 name 字段为 haicoder 的所有记录,具体命令如下:

db.haicoder.find({$where:'this.name=="haicoder"'}, {_id:0})

执行完毕后,此时,如下图所示:

110_mongodb where.png

我们看到,此时我们查询了 name 字段为 haicoder 的所有的记录,现在我们再次使用 where 进行查询,具体命令如下:

db.haicoder.find({$where:'this.name=="haicoder" && this.url=="haicoder.net"'}, {_id:0})

执行完毕后,此时,如下图所示:

111_mongodb where.png

我们看到,我们在 where 里面使用了与操作符。

MongoDB where总结

在 MongoDB 中,我们使用 find 查询记录时,还可以使用 where 字句,$where 操作符功能强大且灵活,它可以将 JavaScript 表达式的字符串或 JavaScript 函数作为查询语句的一部分。