mongodb - 如何过滤mongodb文档中的字符串数组?
问题描述
我有多个看起来像这样的 mongodb 文档
{
"_id": "001",
"car_description": "Audi",
"sales": [
"India/Mumbai",
"India/Delhi",
"India/Chennai",
"India/Kolkata",
"US/NYC",
"US/SF"]
},
{
"_id": "002",
"car_description": "BMW",
"sales": [
"India/Mumbai",
"India/Delhi",
"India/Chennai",
"India/Kolkata",
"US/NYC",
"US/SF"]
}
我正在努力获得car_description
在印度发生的销售情况。最终输出应该是这样的。
{
{
"car_description": "Audi",
"sales": [
"India/Mumbai",
"India/Delhi",
"India/Chennai",
"India/Kolkata"]
},
{
"car_description": "BMW",
"sales": [
"India/Mumbai",
"India/Delhi",
"India/Chennai",
"India/Kolkata"]
}
}
编辑:我尝试使用它,但这并没有过滤掉销售。相反,它给出了一条错误消息“无法识别的表达式'$regexMatch”
db.collection.aggregate([
{
"$project": {
"car_description": 1,
"sales": 1,
"sales": {
"$filter": {
"input": "$sales",
"as": "sale",
"cond": {
$regexMatch: {
input: "$$sale",
regex: "India",
options: "i"
}
}
}
}
}
}
])
解决方案
查看此代码段,看看它是否满足您的需求:
db.sales.find({
"sales": {
$elemMatch: {
$regex: "^India\/",
$options: "i"
}
}
},
{
"car_description": 1,
"sales": 1
})
https://mongoplayground.net/p/61sqeMXU_yg
编辑:如果您想filter
排除与表达式不匹配的所有区域,regex
您可以尝试以下aggregate
查询:
MongoDB >= 4.1.11
db.sales.aggregate([
{
$match: {
"sales": {
$elemMatch: {
$regex: "^India\/",
$options: "i"
}
}
}
},
{
$set: {
sales: {
$filter: {
input: "$sales",
as: "sale",
cond: {
$regexMatch: {
input: "$$sale",
regex: "^India\/",
options: "i"
}
}
}
}
}
}
])
https://mongoplayground.net/p/NGDSVQeXtRI
较旧的 MongoDB 版本
db.collection.aggregate([
{
$match: {
"sales": {
$elemMatch: {
$regex: "^India\/",
$options: "i"
}
}
}
},
{
$set: {
sales: {
$filter: {
input: "$sales",
as: "sale",
cond: {
$eq: [
{
$toLower: {
$arrayElemAt: [
{
$split: [
"$$sale",
"/"
]
},
0
]
}
},
"india"
]
}
}
}
}
}
])
推荐阅读
- puppeteer - Puppeteer 无限滚动不起作用
- laravel - 如何与收银员处理失败的订阅付款?
- javascript - 从数组的第一个索引的对象中解构值
- c# - 使用鼠标单击 GDI 线绘制
- discord - Discord 关注非公告(常规)频道
- create-react-app - .prettierrc 配置在 create-react-app 项目中不起作用
- oracle - 无法在plsql中打印异常
- java - Spring OAUTH2 登录如何与 REST API 一起使用?
- graphics - 用于视图合成的基于网格的翘曲与基于喷溅的翘曲
- android - 如何转换 MutableLiveData
作为分支的直接布尔值?