arrays - $in 查询数组字段 Mongo db
问题描述
我有一个这样的文档
{
"_id" : "oidfi",
"users": [
{
"_id": "q",
"tags": ["a", "b", "c"],
"age": 20
},
{
"_id": "q",
"tags": ["x", "y", "z"],
"age": 30
}
],
"type": "repo"
}
我想用几个字段过滤用户数组(我可以用下面的查询来做到这一点)
{
"$match": {
"$and": [
{
"_id": "a506f8af6f510f616bea14715276d474d2b363f0aef10443cc0f11559b139147"
}
]
}
},
{
"$project": {
"users": {
"$filter": {
"input": "$users",
"as": "users",
"cond": {
"$and": [
{
"$gte": [
"$$user.age",
15
]
}
]
}
}
}
}
}
]
有没有办法让我添加条件,在其中我给出标签项目列表并从他们的标签数组中获取匹配至少一个项目的用户
$$user.tags.containsAny(["a", "x"])
谢谢
解决方案
您可以在聚合管道中执行以下操作:
$setIntersection
找出users.tags
数组和输入数组的交集,即示例中的 ["a", "x"]$size
在步骤 1 中找到数组的大小$match
步长 2 的大小大于 0
"anyTagsMatched": {
$gt: [
{
$size: {
"$setIntersection": [
"$users.tags",
[
"a",
"x"
]
]
}
},
0
]
}
这是Mongo游乐场供您参考。
推荐阅读
- android - 在附加调试器的情况下启动会导致 android 应用程序挂起。事件日志中的 BadPacketException
- javascript - Is there anyway to delete my users cache?
- javascript - 反应 useEffect 的行为不符合预期
- python-3.x - 除了 pandas 和 dask 之外,还有哪些更快的读取大数据集和应用行明智操作的方法?
- html - 我怎样才能使每个 html/css 成为一个单独的块?
- c++ - C++ 运行时错误(使用 -fsanitize=undefined):对象的 vptr 可能无效:abs(offset to top) too big
- javascript - 是否可以将窗口消息发送到嵌入式网站?
- c# - Hololens 2 点击和头部移动在 Unity 中有效,但在 HoloLens 上无效
- c# - C#如何将抽象类的对象添加到数组中?
- c++ - 这是保持线程安全以同步对象的好方法吗?