我正在使用 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/