Mongodb查询数组

时间:2015-02-10 16:51:33

标签: arrays mongodb

我有一份如下文件:

{
    "_id" : LUUID("8a831942-1dd6-1942-8759-c6275305d10d"),
    "Record" : "SEK_2Y_9Y",
    "RawDataDictionary" : [[ 1033, ""], [3355,""], [886,"45.8"],[874,"589"]],
    "TimeStamp" : ISODate("2015-02-10T16:27:14.847Z")
}

“RawDataDictionary”包含一对代码和值。

我希望他们的“RawDataDictionary”包含一个包含874个代码的项目以及任何非null / Empty的值的所有文档。

所以[874,“”]不会遵守它,但[874,“某事”]会。>

有什么想法吗?

多伦。

1 个答案:

答案 0 :(得分:0)

我不相信有一种方法可以用MongoDB查询语言表达您的文档条件(从2.6开始)。问题是没有办法表达“任何[第二个]非空/空值”的条件。

db.test.find({ "RawDataDictionary" : [1033, ""] }) // ok

db.test.find({ "RawDataDictionary" : [874, { "$ne" : "" }) // nope

如果您修改RawDataDictionary字段的结构,则可以使用$elemMatch执行查询:

{
    "Record" : "SEK_2Y_9Y",
    "RawDataDictionary" : [
        { "code" : 1033, "value" : "" }, 
        { "code" : 3355, "value" : "" },  
        { "code" : 886, "value" : "45.8" }, 
        { "code" : 874, "value" : "589" }
    ],
    "TimeStamp" : ISODate("2015-02-10T16:27:14.847Z")
}

db.test.find({ "RawDataDictionary" : {
    "$elemMatch" : { 
        "code" : 874, 
        "value" : { "$nin" : ["", null] } 
    } 
} })