現在、配列集計演算子$filterの$in演算子を使用することはできません。
だが、これは文書スキーマであるとしましょう:
{
_id: 1,
users: [
{
_id: 'a',
accounts: ['x', 'y', 'z']
},
{
_id: 'b',
accounts: ['j','k','l']
}
]
}
私が欲しい、accounts
配列の内容に基づいてusers
のフィルタ配列で文書を取得するには、aggregate
を使用します。$in
は$filter
オペレータで動作するかどう
、私はそれがこのように見えることを期待する:filtered_users
で
db.test.aggregate([
{
$project: {
'filtered_users': {
$filter: {
input: '$users',
as: 'user',
cond: {
$in: ['$$user.accounts', ['x']]
}
}
}
}
}
])
とリターンをのみX以来、最初のユーザーが自分でですアカウント。
しかし、私が言ったように、これは動作しないと、私はエラーを取得:それは$filter
オペレータではサポートされていないため
"invalid operator '$in'"
を。私はドン」 -
今、私は$unwind
でそれを行うと、通常の$match
演算子を使用することができます知っているが、それははるかに長い(そして醜い)になる配列として戻って結果を設定する$group
を使用することの必要性と集約これをしたい
希望の結果を得るために$filter
オペレータを操作する他の方法がある場合は、私の質問です。
素敵な答えで
$in
集計演算子を使用することができます!ありがとう – TomG