android - mongodb过滤数组中objectid关联的内容状态
问题描述
我想通过过滤功能导入数据。
我认为我们可能应该使用“聚合”而不是“查找”。
我想要的数据的条件是:
有 A 集合和 B 集合。
A Collection 的“内容”指向 B Collection 的“_id”。
仅当 B Collection 的“Visibility”值为“true”时,才会获取相应的值。
“A”系列:
{
"_id" : ObjectId("aaaaa"),
"title" : "study list",
"contents" : [ ObjectId("11111"), ObjectId("22222") ]
}
{
"_id" : ObjectId("bbbbb"),
"title" : "study list",
"contents" : [ ObjectId("33333"), ObjectId("44444") ]
}
{
"_id" : ObjectId("ccccc"),
"title" : "study list",
"contents" : [ ObjectId("55555") ]
}
“B”系列:
{
"_id" : ObjectId("11111"),
"visibility" : true
}
{
"_id" : ObjectId("22222"),
"visibility" : true
}
{
"_id" : ObjectId("33333"),
"visibility" : true
}
{
"_id" : ObjectId("44444"),
"visibility" : false
}
{
"_id" : ObjectId("55555"),
"visibility" : false
}
== 数据结果
{
"_id" : ObjectId("aaaaa"),
"title" : "study list",
"contents" : [ ObjectId("11111"), ObjectId("22222") ]
}
我怎样才能得到我想要的数据?
解决方案
您可以使用以下聚合
db.collectionA.aggregate([
{ "$lookup": {
"from": "collectionB",
"localField": "contents",
"foreignField": "_id",
"as": "data"
}},
{ "$match": {
"data": {
"$not": {
"$elemMatch": { "visibility": false }
}
}
}}
])
推荐阅读
- html - 一些线的边界比其他线厚
- android - Android:单选按钮文本与数字没有很好地对齐
- python-sphinx - 如何做狮身人面像树和子树结构,如 md 文件中的链接
- minizinc - 有没有办法在 minizinc 中自定义 int_search?
- mysql - 使用 MySQL 的 TypeORM 中的基本 leftJoinAndSelect
- c++ - 使用书中给出的 square() 函数时出现未声明的标识符错误
- django - 如何使用 folium 显示来自数据库的图像
- python - AttributeError:“列表”对象没有属性“add_student”
- asp.net-core-3.1 - 缓存控制响应标头在不同的 url 和浏览器中有所不同(asp 核心网站)
- java - 使用 Java API 和 DMN 的 Flowable BPMN