(それは質問には重要なもののように簡略化)このようになります項目(マングース)スキーマがあります:
{
brand: {
name: String,
},
title: String,
description: [{ lang: String, text: String }],
shortDescription: [{ lang: String, text: String }],
variants: {
cnt: Number,
attrs: [
{
displayType: String,
displayContent: String,
displayName: [{ lang: String, text: String }],
name: String,
},
],
}
}
私はアイテムをフィルタ処理しようとしています言語によって、私は次のクエリを構築しました:
db.items.aggregate([
{ $match: { 'description.lang': 'ca', 'shortDescription.lang': 'ca' } },
{ $project: {
'brand.name': 1,
title: 1,
description: {
'$filter': {
input: '$description',
as: 'description',
cond: { $eq: ['$$description.lang', 'ca'] }
}
},
shortDescription: {
'$filter': {
input: '$shortDescription',
as: 'shortDescription',
cond: { $eq: ['$$shortDescription.lang', 'ca'] }
}
},
'variants.cnt': 1,
'variants.attrs': 1
} }
])
をそして、それは期待通りに動作します。それは、言語によってdescription
とshortDescription
をフィルタリングします。今すぐすべてvariants.attrs.$.displayName
をフィルタリングすることが可能かどうか疑問に思っています。それを行う方法はありますか?
私は$unwind
variant.attrs
にしようとしてきたが、再び$group
にしようとしたとき、私はcompletly迷子と私はこれが最善の方法であれば、本当にわからないんだけど...
私は質問があります:description、shortDescription、variants.attrs variants.attrs.displayNameはリストです。これらの4つのリストはすべて複数の要素を持つことができますか? – sergiuz
はい、すべての言語のテキストが含まれています。 'description:[{lang: 'en'、テキスト: 'This item is awful'}、{lang: 'es'、テキスト: 'Este producto esincreíble'}、...]' – Miquel