我的收集模式如下:
产品
{
_id: ObjectId(), // default mongo db id
specification: [
{key: 'Name', value: "value 1"},
{key: 'Category', value: "value 2"},
{key: 'Department', value: "value 3"}
]
}
现在,我想使用通用过滤器对此进行查询。例如,
Name = value 1
和Category in [value 2, value 3]
和Department = value 3
买给我所有产品Name = value 1
或Category = value 2
或Department in [value 3, value 4]
买给我所有产品我一直在尝试将$match
与$elemMatch
一起使用。但这仅允许一个查询,但我无法使用$and
和$or
运算符。
答案 0 :(得分:0)
您可以很好地使用$elemMatch
,只需将$and
/ $or
放在顶层。
您的第一个例子是
db.products.find({
$and: [
{
specification: {
$elemMatch: { key: 'Name', value: 'value 1' }
}
},
{
specification: {
$elemMatch: { key: 'Category', value: { $in: ['value 1', 'value 2'] } }
}
},
{
specification: {
$elemMatch: { key: 'Department', value: 'value 3' }
}
}
]
})