mongodb - 文档的mongodb默认值不在数组中
问题描述
我需要在 array 中选择 id [1, 2, 3, 4, 5]
,如果没有带有 Id 的文档3 and 5
,我想要这个的默认名称。
例如。
{id:1,name:a}
{id:2,name:b}
{id:4,name:c}
查询某事...
find ... id:{$in:{1,2,3,4,5}}})
-> 结果应该是
{id:1,name:a}
{id:2,name:b}
{id:3,name:defaultvalue}
{id:4,name:c}
{id:5,name:defaultvalue}
我想要 3 和 5 的默认值。
我该怎么查询??请帮忙
解决方案
您可以使用MongoDB 聚合框架来实现您的用例
- 我从$facet开始并创建了两个数组:
missingIDs
找出不在文档中的缺失 IDmatchedDocuments
到$project数组 [1,2,3,4,5] 中可用的所有可用文档
- 然后连接这两个数组,并使用$addFields和$ifNull在 null 时添加名称字段。
尝试以下聚合查询:
db.collection.aggregate([
{
$facet: {
missingIDs: [
{
$group: {
_id: null,
ids: {
$push: {
id: "$id"
}
}
}
},
{
$project: {
_id: 0,
ids: {
$setDifference: [
[
{
id: 1
},
{
id: 2
},
{
id: 3
},
{
id: 4
},
{
id: 5
}
],
"$ids"
]
}
}
},
{
$unwind: "$ids"
},
{
$project: {
id: "$ids.id"
}
}
],
matchedDocuments: [
{
$match: {
id: {
$in: [
1,
2,
3,
4,
5
]
}
}
},
{
$project: {
id: 1,
name: 1,
_id: 0
}
}
]
}
},
{
"$project": {
concat: {
"$concatArrays": [
"$matchedDocuments",
"$missingIDs"
]
}
}
},
{
$unwind: "$concat"
},
{
"$addFields": {
"concat.name": {
"$ifNull": [
"$concat.name",
"defaultvalue"
]
}
}
},
{
$project: {
id: "$concat.id",
name: "$concat.name",
}
},
{
"$sort": {
id: 1
}
}
])
推荐阅读
- python - 尝试注册时烧瓶中的 sqlalchemy.exc.OperationalError
- java - ExpectNew 没有被同一类调用两次
- c - C - 在循环中使用 fgets() 获取分段错误
- c++ - 我试图计算大写字符但它不起作用,我不想改变主要但如果你能帮我修复这个功能
- sql - 光标和过程/函数 pl sql 以显示员工姓名
- excel - 隐藏取消隐藏特定工作表慢
- python - 如何在 python 中获取我系统支持的所有屏幕分辨率
- php - 页面 (.php) 停止加载包含文件
- html - 保持文本区域旁边的下拉菜单不起作用
- mysql - 如果我的数据库中有一个空值,则颤振列表视图会显示无效的争论