我必须以用户输入集合名称、字段名称和字段值的方式对集合运行动态查询,并且我必须首先检查用户提供的字段名称是否存在于集合中,如果不存在则我必须运行另一个查询,如下例所示。
例如:
如果用户输入集合名称user
,字段名称为type
,字段值为article
。根据参数我必须查询如下:
1)如果集合user
中存在type
字段,我的查询将是:
query = user.find({type:'article'})
2)如果类型不是集合user
的字段,我的查询将是:
query = user.find()
我尝试了 $exists
但它对我不起作用。在查询之前如何使用 $exists
?因为我的集合、字段名称和字段值都是动态的。
如何检查 user
集合中是否存在 type
字段?
我已经尝试过使用 $exists
解决方案,但我想知道是否还有其他方法可以实现。
最佳答案
正如 @Philipp 在他的评论中提到的,您必然会遇到性能问题,因为您需要在不使用索引的情况下执行完整的集合扫描。使用$exists
,查询将返回也等于 null 的字段。假设您要首先查找设置了字段 type
并且不为 null 的所有记录,然后使用 $ne
的组合运算符(operator)。您可以尝试的最接近的是获取该字段的计数,然后根据字段计数确定查询对象:
var type_count = db.user.find({"type": {$exists: true, $ne: null}}).count();
var query = (type_count > 0) ? {"type": "article"} : {};
db.user.find(query);
关于javascript - 在查询 mongodb 之前,如何检查 mongo db 中是否存在字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394444/