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,而不是像最简单的方法。