MongoDB $where操作符

$where操作符用于MongoDB查询,支持使用JavaScript表达式或函数进行复杂条件匹配。此操作符不利用索引,效率较低,适合特定场景下使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$where操作符
$where操作符功能强大且灵活,它可以将JavaScript表达式的字符串或 JavaScript函数作为查询语句的一部分。在JavaScri pt表达式和函数中,可以 使用this或obj来引用当前操作的文档。 JavaScript表达式或函数返回值为true时,才会返回当前的文档。
查询时,$where操作符不能使用索引,每个文档需要从BSON对象转换成 JavaSript对象后,才可以通过$where表达式来运行。因此,它比常规查询要 慢很多,一般情况下,要避免使用$where查询。

$where实例
   
   
db = connect("localhost:27017/test");
db.col.drop();
var bulk = db.col.initializeUnorderedBulkOp();
 
//测试数据
var doc1 = { "apple":1, "banana": 6, "peach" : 4}
bulk.insert(doc1);
var doc2 = {"apple":3, "banana": 3, "peach" : 4}
bulk.insert(doc2);
//执行插入操作
bulk.execute()
 
 
print("========find--$where操作符的使用========")
/*
参数可以是JavaScript函数或JavaScript表达式的字符串
{ $where: function() { } }
{ $where: "this.A == this.B"} { $where: "obj.A == obj.B"}
*/
var cursor = db.col.find(
{
$where:function()
{
for (var current in this)
{
printjson(current);
for (var other in this)
{
if (current != other && this[current] == this[other])
return true;
}
}
}
});
printjson( cursor.toArray() );
 
var cursor = db.col.find(
{
$where:"this.apple==1 && this.banana==6"
});
printjson( cursor.toArray() );
 
运行结果:
   
   
C:\>mongo --quiet find_where.js
========find--$where操作符的使用========
[
{
"_id" : ObjectId("56e57131ec7f668422a1094a"),
"apple" : 3,
"banana" : 3,
"peach" : 4
}
]
[
{
"_id" : ObjectId("56e57131ec7f668422a10949"),
"apple" : 1,
"banana" : 6,
"peach" : 4
}
]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

morris131

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值