с коллекцией (productList) и документом, как показано ниже:
{ "_id":"1",
"product_name" : "Haier 240l",
"version" : "1.0",
"filterInfo" : [
{
"name" : "brand",
"value" : "Haier"
},
{
"name" : "energy_rating",
"value" : "4 Star"
}
]
}
{ "_id":"2",
"product_name" : "Haier 310l",
"version" : "1.0",
"filterInfo" : [
{
"name" : "brand",
"value" : "Haier"
},
{
"name" : "energy_rating",
"value" : "3 Star"
}
]
}
{ "_id":"3",
"product_name" : "Samsung 275l",
"version" : "1.0",
"filterInfo" : [
{
"name" : "brand",
"value" : "Samsung"
},
{
"name" : "energy_rating",
"value" : "3 Star"
}
]
}
{ "_id":"4",
"product_name" : "Lg 254l",
"version" : "1.0",
"filterInfo" : [
{
"name" : "brand",
"value" : "Lg"
},
{
"name" : "energy_rating",
"value" : "3 Star"
}
]
}
Я хочу получить весь документ с (i), брендом: Haier и energy_rating: 3
И (ii) марка: Haier или марка: Samsung и energy_rating: 3
Для (i) я попытался, используя elemMatch ниже запросов:
db.productList.find({filterInfo: { $elemMatch: {'name':{$in:['brand','enery_rating']},'value':{$in:['Samsung','3 Star']}}}})
db.getCollection('productList').find({'filterInfo': {$elemMatch: { 'value':'Samsung', 'value' :'3 Star'} } })
db.getCollection('productList').find({'filterInfo': {$elemMatch: { $and:[ {'name':'brand', 'value' :'Samsung'}, {'name':'energy_rating', 'value':'3 Star' } ]} } })
db.getCollection('productList').find({'filterInfo': {$elemMatch: { 'name':'brand', 'value' :'Samsung', 'name':'energy_rating', 'value':'3 Star'} } })
Но ни один из них не работает правильно.Я здесь неправильно делаю некоторые бацисы (новичок здесь).