javascript - 在查询 mongodb 之前,如何检查 mongo db 中是否存在字段?

标签 javascript node.js mongodb

我必须以用户输入集合名称、字段名称和字段值的方式对集合运行动态查询,并且我必须首先检查用户提供的字段名称是否存在于集合中,如果不存在则我必须运行另一个查询,如下例所示。

例如: 如果用户输入集合名称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/

相关文章:

linux - 复制mongodb数据目录到另一台服务器

javascript - 使用来自 Flickr 的 JSON 输出来显示来自搜索的图像

javascript - 如何获取div的动态id值

javascript - 将回调传递给异步函数甚至再次包装它是否正常?

jquery - 使用jquery接收gcm消息?

node.js - 在 Web 应用程序的内存中存储复杂对象?

java - 如何使用 java 使用 ObjectIds 创建查询?

Javascript 调用并应用构造函数

javascript - Jquery Ajax 总是触发错误

javascript - JS : Textfile to JSON