我知道这个问题不够清楚 我将尝试在一个例子的帮助下解释它。
我在 RDBMS
中有以下数据 的 ITEM MATERIAL
pen plastic
cell phone plastic
mirror glass
tshirt cloth
bedsheet cloth
在我的代码中,我有一个变量material
和以下查询
SELECT * FROM TABLE WHERE MATERIAL = {material} OR {material} = NULL;
考虑以下情况,
如果material == "plastic"
,那么输出将是
的 ITEM MATERIAL
pen plastic
cell phone plastic
如果material == "glass"
,那么输出将是
的 ITEM MATERIAL
mirror glass
但是,如果material ==
null
,则输出将为(未应用过滤器)
的 ITEM MATERIAL
pen plastic
cell phone plastic
mirror glass
tshirt cloth
bedsheet cloth
我想在 mongodb 中实现相同的目标
单个查询将根据material
的值过滤数据,但在material == null
时不应用过滤器。
如何实现这一目标?
我应该如何修改查询对象{"material" : _the_variable_material_}
以获得相同的结果?
或者还有其他方法可以解决这个问题吗?
以下是包含相同数据的 mongodb 文档。
{
"item": "pen",
"material": "plastic"
},
{
"item": "cell phone",
"material": "plastic"
},
{
"item": "mirror",
"material": "glass"
},
{
"item": "tshirt",
"material": "cloth"
},
{
"item": "bedsheet",
"material": "cloth"
}
答案 0 :(得分:0)
执行此查询的最佳方法是将其嵌套在if语句中,该语句用于计算_the_variable_material _的值:
if(_the_variable_material_ === 'null'){
db.collection.find({});
} else {
db.collection.find({ $or: [ { "material": _the_variable_material_ }, {"material": {$exists: false}}, {"material": null} ] })
}
或者,在单个查询中但性能较低:
db.collection.find({ $or: [ { "material": _the_variable_material_ }, {"material": {$exists: false}}, {"material": null}, {$where: "this._the_variable_material_ == 'null'" } ] })