mongoose,如何做一个find()两个或条件

我试图做一个查找将获得所有文档的标题或desc包含正则expression式(工作),然后进一步筛选,只包含文件或者有“私人”标志设置为false或“user”字段设置为给定的userId。

这是我到目前为止尝试…

FCSet.find({}, {"flashCards":0}).or([{ 'title': { $regex: re }}, { 'desc': { $regex: re }}]).or([{ 'private': false}, { 'user': 'userId'}]).sort('title') 

这应该只是返回6行,但它返回56.如果我拿出第二或(),然后它的工作过滤title / desc。 我猜我正在以错误的方式去做。

有人可以帮我弄清楚如何正确地做到这一点?

你必须把OR变成AND

 FCSet.find( { "flashCards": 0 }, $and: [ { $or: [ { 'title': { $regex: re } }, { 'desc': { $regex: re } } ] }, { $or: [ { 'private': false }, { 'user': 'userId' } ] } ] ).sort('title') 

@heinob的答案是完全正确的,但我恳求你不要使用它。

最大的原因是嵌套$or查询不使用索引: https : //jira.mongodb.org/browse/SERVER-3327

(实际上更具体到你的情况: https : //jira.mongodb.org/browse/SERVER-6542 )

因为这样的任何指标都是完全没用的。

相反,如果你编写代码到你的应用程序,最好是创build一个$or block,而不是像最简单的方法。