MongoDB $where操作符

$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
}
]

猜你喜欢

转载自blog.csdn.net/u022812849/article/details/51314771