mongodb - 计算 $or 在 MongoDB 中满足的查询数
问题描述
有没有办法搜索集合中的所有文档,并根据它们匹配的查询数量对它们进行排序?
即顶部匹配10个查询的文档,底部匹配1个的文档
我一直在尝试通过聚合管道来实现这一点,但我被卡住了。
例如,假设我想搜索 18 到 24 岁之间的用户,并使用正则表达式检查字符串是否存在:
db.users. aggregate({
"$match": {
'$or': [
{
"name": /.*m.*/
},
{
'age': {
'$gt': 18,
'$lt': 24
}
}
]
}
...
我不知道在哪里比这更进一步
任何帮助将非常感激
编辑:
这是一个样本集合:
users = [{
'name': 'bob',
'age': 19
},
{
'name': 'susan',
'age': 16
},
{
'name': 'mark',
'age': 25
},
{
'name': 'matt',
'age': 19
}]
regex /.*m.*/
检查查询 1: 、查询 2:后的示例输出18 < age < 24
:
[{
'name': 'matt',
'age': 19,
'matched': 2
},
{
'name': 'bob',
'age': 19,
'matched': 1
},
{
'name': 'mark',
'age': 25,
'matched': 1
}]
马特是第一个,因为他满足了这两个问题。
解决方案
推荐阅读
- postgresql - 如何声明一个变量并在 Postgres 的 if 语句中使用它
- c# - 适用于本地 Web 应用的 Azure Application Insight 遥测
- bash - 删除一组标题之间的行
- javascript - 基于输入数组操作复杂对象
- unreal-engine4 - UE4子弹控制
- python-3.x - 侧载静态数据
- iframe - 带有 Cypress 的 iframe:如何在 iframe 中等待 api 调用
- broadcastreceiver - 屏幕锁定在android 10中时setFullScreenIntent不起作用
- javascript - 在 Vue 组件中处理潜在的多个模式的正确方法?
- azure - Azure Bot Framework - Direct Line 集成在用户键入内容之前不会显示介绍性消息