查询MongoDB以获取非空数组相交的文档

所以 – 我开发了一个Heroku + Node + Express + MongoDB应用程序,而且我一直在玩整天试图弄清楚如何得到我想要的mongo查询。 在一个mongo集合中,每个文档都有一个属性“fruits”,这个属性是一个string数组

fruits : ['apple', 'orange', 'lemon'] 

水果的大小和内容是任意的。 我想查询数据库的水果数组至less有一个元素与我提供查询时提供的另一个数组的所有文档。 我怎样才能做到这一点?

到目前为止,我试过的是$ where查询和一些服务器端JS。 如果我做了类似的事情

 mongo.Db.connect(mongoUri, function(err, db) { db.collection('Users', function(er, collection) { collection.find( {$where: 'false' } ).toArray(function(err, matches){ console.log(matches) ... }); }); }); 

我得到一个空arrays – 好! 如果我把错误更改为真,我就可以得到整个数据库 – 也不错! 事情变得不那么好,如下所示:

 collection.find( {$where: function(){return false} } ).toArray(function(err, matches){... 

我再次获得整个DB! 我想这显然会返回与上面给出的第一个示例相同的空数组,如http://docs.mongodb.org/manual/reference/operator/query/where/

我正在尝试上面的内容,只是为了看看能不能在$ where中使用任何东西 ,但是当我尝试添加服务器端JS的时候会出现更多的问题。 我看了一下http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

并将以下内容添加到我的数据库中的system.js集合中:

 { "_id": "isMatch", "value": "function(){return false}" } 

并用该行修改上面的例子

 collection.find( {$where: 'isMatch()' } ).toArray(function(err, matches){... 

认为当匹配string(我假设它必须估计string)时,isMatch现在是mongo的一大把技巧,string语法是上述玩法中最好的select。 可悲的是,这导致了一个空的控制台日志 – 另一个错误的味道,我期待再次一个空的数组。

任何人都可以帮助我实现上述的查询? 我怀疑我可以自己动手,如果你们友好的人可以帮助我理解1.如何使用函数语法,而不是$ where的string语法,以及2.如何在system.js中正确声明JS函数用$在哪里。 提前致谢!

你的$where查询工作正常,当我在shell中尝试它们,但是你不需要$where这个查询中使用$where 。 相反,您可以使用$in来定位您的fruits字段以查找包含至less一个匹配水果的文档:

 var fruits = ['apple', 'orange', 'lemon']; db.test.find({fruits: {$in: fruits}});