集計クエリの使用:
-
$match
条件、ネストされた$ememMatch
を配置します 2レベルの条件の場合 -
$reduce
vid配列のループを繰り返すには、初期値[]を設定し、現在の配列の文字列かどうかを確認してから、現在の配列を返します。それ以外の場合は、初期値を返します。
let searchString = "adfsdfasfd";
db.collection.aggregate([
{
$match: {
vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } }
}
},
{
$addFields: {
vid: {
$reduce: {
input: "$vid",
initialValue: [],
in: {
$cond: [{ $in: [searchString, "$$this"] }, "$$this", "$$value"]
}
}
}
}
}
])
結果:
[
{
"vid": [
"adfsdfasfd",
"this is some sample text",
"https://example.com"
]
}
]
検索クエリの使用:
- 上記と同じ条件を一致させる
- 射影の場合、一致結果を取得しますが、同じネストされた配列にあります
let searchString = "adfsdfasfd";
db.collection.find(
{ vid: { $elemMatch: { $elemMatch: { $in: [searchString] } } } }
).project({ "vid.$": 1, _id: 0 }).toArray()
結果:
[
{
"vid": [
[
"adfsdfasfd",
"this is some sample text",
"https://example.com"
]
]
}
]