Почему Array.some не работает в предложении Mongo $ where? - PullRequest
0 голосов
/ 14 сентября 2011

Я использую MongoDB 1.8.1.Я хочу эмулировать запрос $elemMatch Монго внутри предложения $where, используя стандартный метод some для массивов JavaScript.Однако запрос никогда ничего не соответствует, даже если я предоставляю фиктивную функцию.

> db.foo.insert({bar: [1, 2, 3]})
> db.foo.count({$where: 'this.bar && (this.bar.length > 0)'})
1
> db.foo.count({$where: 'this.bar && this.bar.some'})
1
> db.foo.count({$where: 'this.bar && this.bar.some(function() {return true;})'})
0

В самой оболочке MongoDB он работает:

> [1, 2, 3].some(function() {return true;})
true

Почему это так?

1 Ответ

2 голосов
/ 14 сентября 2011

просто добавьте return перед вашим запросом where, он будет работать

> db.foo.count({$where: 'return this.bar && this.bar.some(function() {return true;})'})
> 1
> db.foo.count({$where: 'return this.bar && this.bar.some(function(bar) {return bar>2;})'})
> 1
> db.foo.count({$where: 'return this.bar.some(function(bar) {return bar==1;}) &&  this.bar.some(function(bar) {return bar==6;})'})
> 0

Но я предпочитаю использовать функцию вместо строки в выражениях where, это более чисто

>db.foo.count({$where: function() { return  this.bar.some(function(bar) { return bar > 1;}) & this.bar.some(function(bar) { return bar > 2;}) }})
 >1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...