MongoDB 如何通过一个对象数组进行查询?

CodeCleaner 2019-09-23 11:56:06
我现在有一个文档:

[
{ id: 1, category: 'computer', value: 1 },
{ id: 2, category: 'computer', value: 2 },
{ id: 3, category: 'book', value: 2 },
]

调用端会传入一个对象数组,用以从文档中查询数据,这个对象数组是这样:

const query = [
{ category: 'computer', value: 1 },
{ category: 'book', value: 2 }
]

此时希望查询得到的结果是:

[
{ id: 1, category: 'computer', value: 1 },
{ id: 3, category: 'book', value: 2 },
]

项目组现在采用的方式是,用一个循环把query map出来: query.map(({ category, value }) => db.collection.find({ category, value })),但产品环境上可能同时查询许多记录,循环速度稍慢。

问题:有没有一个mongo query解决问题的方法?

尝试过
db.collection.find({ $category: { $in: query.map(one => one.category) }, value: { $in: query.map(one => one.value) } })
,但这样会多筛选出一些结果,比如
  { id: 2, category: 'computer', value: 2 }
这条记录也会被筛选出来,而这并不是期望结果。

感谢各位。
...全文
373 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
CodeCleaner 2019-09-24
  • 打赏
  • 举报
回复
引用 1 楼 zjcxc--个人微信公共号同名 的回复:
这就是一个 or 的条件嘛 db.collection.find({ $or:[ { category: 'computer', value: 1 }, { category: 'book', value: 2 } ] })
亲测可用,感谢回答!
zjcxc 2019-09-24
  • 打赏
  • 举报
回复
这就是一个 or 的条件嘛
db.collection.find({ $or:[
{ category: 'computer', value: 1 },
{ category: 'book', value: 2 }
] })

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧