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

标签 mongodb database

MongoDB。文档的其中一个字段可以是一个数组,包括一个空数组,一个子文档,可以为空或不为空,或者为空,或者根本不存在。我需要一个 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() ?

最佳答案

使用以下查询:

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
    }
}

关于mongodb - 如何检查MongoDB中的字段是[]还是{}?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617391/

相关文章:

javascript - 如何 : Produce mongoDB query string for the fields dynamically from a javascript app

sql - 将多种数据类型存储到数据库中的最佳方法是什么

c# - 在数据库中生成测试数据的任何工具

mysql - 如何将mysql表 append 到不同数据库中的另一个表

database - 联邦税号应该在数据库中加密吗?

database - 如何使用 bool 属性检查运行查询

node.js - Mongoose 无法使用 $in 运算符找到引用

database - 质数属性可以有空值吗?

java - 错误 : Ambiguous handler methods mapped for HTTP path in spring data rest

MongoDB 唯一索引错误 : how to know which field generated the error?