node.js - Mongo +检查存在的多个字段

标签 node.js mongodb

我正在使用 mongo 和 nodejs。

我有数组列表:

var checkFields = ["field1","field2","field3"];

我尝试获取具有数组列表字段且用户字段等于 admin 的记录数。

示例数据:

[
    {  
        "checkFields": { 
            "field1": "00124b3a5c31", 
            "user": "admin" 
        } 
    },
    {  
        "checkFields": { 
            "field2": "00124b3a5c31", 
            "user": "admin" 
        } 
    },
    { 
        "checkFields": { 
            "field1": "00124b3a5c31", 
            "user": "regular" 
        } 
    }
]

查询:

db.collection_name.find(
    {"checkFields.user" : "admin"} 
    { "checkFields.field1": { $exists: true} } 
)

预期结果:

结果是获取数组 list(checkFields) 中与字段匹配的行数。

最佳答案

为字段存在性检查列表构建一个 $or 数组是正确的方法,但假设您使用的是当前的 node.js 构建,您可以将查询创建简化为:

var checkFieldsLists = checkFields.map(field => ({
    ['checkFields.' + field]: {$exists: true}
}));
var query = {
    $or: checkFieldsLists,
    'checkFields.user': 'admin'
}

这会删除“用户是管理员”检查的多余 $or,这样您还可以删除外部 $and,因此生成的查询是:

{ '$or':
   [ { 'checkFields.field1': { '$exists': true } },
     { 'checkFields.field2': { '$exists': true } },
     { 'checkFields.field3': { '$exists': true } } ],
  'checkFields.user': 'admin' }

关于node.js - Mongo +检查存在的多个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39363578/

相关文章:

.net - 如何在 MongoDB 中存储 XML?

mongodb - mongodb 查询中键的通配符

mongodb - mongoDB 中具有时间间隔的增量 MapReduce

javascript - Nodejs - 获取运行进程的环境变量

javascript - 如何实现需要持续运行的 Node 应用程序?

javascript - 有人可以告诉我如何在 Unix 上运行 Node.js 吗?

node.js - express 中的 bodyparser 文本数据

javascript - 如何模拟在另一个导入中导入的方法

javascript - Mongodb数据插入问题

mongodb - $week 函数和聚合中的第一天