一致式内の正規表現演算子でドキュメントに格納されている正規表現フィールドを参照することはできません。
そのため、現在の構造ではモンゴ側では実行できません。
$lookup
平等条件でうまく機能します。したがって、1つの代替手段(Nicが提案したものと同様)は、投稿コレクションを更新して、keywords
と呼ばれる追加のフィールドを含めることです。 (検索可能なキーワード値の配列)各タイトル。
db.users.aggregate([
{$lookup: {
from: "posts",
localField: "userregex",
foreignField: "keywords",
as: "posts"
}
}
])
上記のクエリは次のようになります(3.4から機能します)。
keywords: { $in: [ userregex.elem1, userregex.elem2, ... ] }.
ドキュメントから
以前のバージョン(3.2でテスト済み)は、配列の順序、値、配列の長さが同じである場合にのみ一致するようです。
サンプル入力:
ユーザー
db.users.insertMany([
{
"name": "James",
"userregex": [
"another",
"here"
]
},
{
"name": "John",
"userregex": [
"another",
"string"
]
}
])
投稿
db.posts.insertMany([
{
"title": "a string here",
"keyword": [
"here"
]
},
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
])
サンプル出力:
[
{
"name": "James",
"userregex": [
"another",
"here"
],
"posts": [
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "a string here",
"keywords": [
"here"
]
}
]
},
{
"name": "John",
"userregex": [
"another",
"string"
],
"posts": [
{
"title": "another string here",
"keywords": [
"another",
"here"
]
},
{
"title": "one string here",
"keywords": [
"string"
]
}
]
}
]