如何检查MongoDB中的字段是[]还是{}?

时间:2015-06-03 10:23:31

标签: mongodb database

MongoDB的。文档的一个字段可以是数组,包括空数组,子文档,可以为空或不为空,或者为null,或者根本不存在。我需要一个与非空子文档匹配的find()条件,只有那个。

所以:

fieldName: {} - no match.
fieldName: [ { id:0 } ] - no match.
fieldName: [ {} ] - no match.
No field called fieldName - no match.
fieldName: null - no match.
fieldName: { id: 0 } - match.

我无权修改任何内容,我必须按原样使用数据库。如何制定find()?

2 个答案:

答案 0 :(得分:3)

使用以下查询:

db.test.find({ 
   "fieldName": { "$gt": {} }, 
   "fieldName.0": { "$exists": false } 
})

例如,使用上述测试用例,请插入以下文档:

db.test.insert([
    { _id: 1, fieldName: {} },
    { _id: 2, fieldName: [ { id: 0 } ] },
    { _id: 3, fieldName: [ {} ] },
    { _id: 4 },
    { _id: 5, fieldName: null},
    { _id: 6, fieldName: { id: 0 } }
])

上述查询将返回包含_id: 6

的文档
/* 0 */
{
    "_id" : 6,
    "fieldName" : {
        "id" : 0
    }
}

答案 1 :(得分:1)

您可以使用$type$exists运算符。

首先检查id的类型,如果fieldname是使用所谓的dot notation的数组,则检查后者。

db.collection.find({ 
    "fieldName.id": { $type: 1 }, "fieldName.0": { $exists: false }
})