在具有值条件的数组中重复
duplicates in array with condition of value
我有以下带有数组的文档(名称 gists
)。文档示例:
{
"_id": ObjectId("60a2c0621e5f043b735e36ef"),
"car_id": 78,
"terminal": "JFK",
"gists": [
"A",
"M",
"C",
"D",
"Q",
"J",
"F"
]
},
我的 objective 是查询所有包含重复“A”的文档并获取它们的 car_id
.
虽然我可以找到重复项,但我无法在 gists
中找到“A”的结果。
db.collection.aggregate([
{
"$project": {
"gists": 1
}
},
{
"$unwind": "$gists"
},
{
"$group": {
"_id": {
"_id": "$_id",
"cid": "$gists"
},
"count": {
"$sum": 1
}
}
},
{
"$match": {
"$and": [
{
"count": {
"$gt": 1
}
},
{
"gists": "A" **//<---- this is where I get it off. Gist must contain A in the array**
}
]
}
},
{
"$group": {
"_id": "$_id._id",
"gists": {
"$addToSet": "$_id.cid"
}
}
}
])
您可以尝试 $expr
表达式运算符和聚合运算符,
$filter
迭代 gists
数组的循环并检查值“A”
$size
从上面过滤的结果中得到总元素
$gt
检查上面的大小是否大于 1
$group
为null并构造car_id
的数组
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$size: {
$filter: {
input: "$gists",
cond: { $eq: ["$$this", "A"] }
}
}
},
1
]
}
}
},
{
$group: {
_id: null,
car_id: { $push: "$car_id" }
}
}
])
结果:
[
{
"_id": null,
"car_id": [79, 80]
}
]
我有以下带有数组的文档(名称 gists
)。文档示例:
{
"_id": ObjectId("60a2c0621e5f043b735e36ef"),
"car_id": 78,
"terminal": "JFK",
"gists": [
"A",
"M",
"C",
"D",
"Q",
"J",
"F"
]
},
我的 objective 是查询所有包含重复“A”的文档并获取它们的 car_id
.
虽然我可以找到重复项,但我无法在 gists
中找到“A”的结果。
db.collection.aggregate([
{
"$project": {
"gists": 1
}
},
{
"$unwind": "$gists"
},
{
"$group": {
"_id": {
"_id": "$_id",
"cid": "$gists"
},
"count": {
"$sum": 1
}
}
},
{
"$match": {
"$and": [
{
"count": {
"$gt": 1
}
},
{
"gists": "A" **//<---- this is where I get it off. Gist must contain A in the array**
}
]
}
},
{
"$group": {
"_id": "$_id._id",
"gists": {
"$addToSet": "$_id.cid"
}
}
}
])
您可以尝试 $expr
表达式运算符和聚合运算符,
$filter
迭代gists
数组的循环并检查值“A”$size
从上面过滤的结果中得到总元素$gt
检查上面的大小是否大于 1$group
为null并构造car_id
的数组
db.collection.aggregate([
{
$match: {
$expr: {
$gt: [
{
$size: {
$filter: {
input: "$gists",
cond: { $eq: ["$$this", "A"] }
}
}
},
1
]
}
}
},
{
$group: {
_id: null,
car_id: { $push: "$car_id" }
}
}
])
结果:
[
{
"_id": null,
"car_id": [79, 80]
}
]