次の Mongoose スキーマを検討してください。
new mongoose.Schema({
attributes: [{
key: { type: String, required: true },
references: [{
value: { type: String, required: true },
reference: { type: mongoose.Schema.Types.ObjectId, required: true }
}]
}
});
このスキーマに従うドキュメントは次のようになります。
{
attributes: [
{
key: 'age', references: [{ value: '35', reference: 298387adef... }]
},
{
key: 'name', references: [{
value: 'Joe', reference: 13564afde...,
value: 'Joey', reference: 545675cdab...,
}
...
]
}
次の条件に従って属性を選択したいと思います: - キーはname
、たとえば - キーname
を持つ属性には、値を持つ少なくとも 1 つの参照がありますJoe
。
理想的には、これらの条件の多くを AND チェーンにしたいと思います。たとえば、{'name': 'Joe'}
と{'age': '35'}
.
そのマングースを行う方法が見つからないようです。次の Mongoose クエリを試してみましたが、良い結果は得られませんでした (偽陽性または偽陰性のいずれかが返されます)。
// First query
query.where('attributes.key', attribute.key);
query.where('attributes.references.value', attribute.value);
// Second
query.and([{ 'attributes.key': attribute.key }, { 'attributes.$.references.value': attribute.value }]);
// Third
query.where('attributes', { 'key': attribute.key, 'references.value': { $in: [attribute.value] }});
では、どうすればいいですか?