Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 排除嵌套字段并仅投影少数字段_Mongodb_Mongodb Query - Fatal编程技术网

Mongodb 排除嵌套字段并仅投影少数字段

Mongodb 排除嵌套字段并仅投影少数字段,mongodb,mongodb-query,Mongodb,Mongodb Query,在这个JSON片段中,我只想检索3个字段\u id.RULES.1.0.\u RULES.stringValue,\u id.MYOPERATION和\u id.CURRENTSTATE { "_id" : { "RULES" : [ { "@class" : "a.b.c.Rules", "_Rules" : { "@class" : "a.b.c.RulesType", "type" : 2, "str

在这个JSON片段中,我只想检索3个字段
\u id.RULES.1.0.\u RULES.stringValue
\u id.MYOPERATION
\u id.CURRENTSTATE

{
  "_id" : {
  "RULES" : [
    { 
      "@class" : "a.b.c.Rules",
      "_Rules" : {
        "@class" : "a.b.c.RulesType",
        "type" : 2,
        "stringValue" : "Y_RULES"
      }
    }
  ],
  "MYOPERATION" : 1,
  "CURRENTSTATE" : "PROPOSED"
  }
}
我试过以下方法

我得到的结果类似于
db.results.find()


任何想法或想法都值得欣赏。

您实际上无法从嵌入式内容中选择字段,尤其是从类似的数组中。如果需要该级别的操作,则需要使用
aggregate()
和:

这将返回第一个数组索引的完整路径:

{
    "_id" : {
        "MYOPERATION": 1,
        "CURRENTSTATE" : "PROPOSED",
        "RULES" : {
            "_Rules" : {
                    "stringValue" : "Y_RULES"
            }
        }
    }
}
或者,如果您只需要指定键的“值”,则可以执行以下操作:

db.results.aggregate([
  { "$project": {
    "_id": {
      "MYOPERATION": 1,
      "CURRENTSTATE": 1,
      "stringValue": {
        "$arrayElemAt": [
          "$_id.RULES._Rules.stringValue",
          0
        ]
      }
    }
  }}
])
它只返回该值:

{
  "_id" : { 
    "MYOPERATION": 1,
    "CURRENTSTATE" : "PROPOSED", 
    "stringValue" : "Y_RULES"
  }
}
在这两种情况下,您都希望从特定的数组索引返回值,而不是这种数据类型的“索引表示法”。您需要在需要转换数组中内容的任何位置使用

还有:

db.results.aggregate([
  { "$project": {
    "_id": 0,
    "MYOPERATION": "$_id.MYOPERATION",
    "CURRENTSTATE": "$_id.CURRENTSTATE",
    "RULES._Rules.stringValue": "$_id.RULES._Rules.stringValue"
  }}
])
但这可能不会返回您实际想要的结果,因为数组条目在实际结束值上变为“反转”:

{
    "MYOPERATION": 1,
    "CURRENTSTATE" : "PROPOSED",
    "RULES" : {
        "_Rules" : {
                "stringValue" : [
                        "Y_RULES"
                ]
        }
    }
}
无论你追求的是什么样的最终结果,它更可能涉及到一些方法的组合,并且可能涉及到一些方法,以获得你真正想要的结果


还要注意的是,
\u id
看起来并不是存储所有信息的好地方,更像是一个错误,而不是故意的。该结构有一种非常XML的“感觉”,好像它是从原始源代码转换而来的。在这种情况下,您最好查看转换过程,并在将输出插入MongoDB之前对其进行“重塑”

你是对的,这个结构是一个嵌套很深的xml,有了你的想法,我能够更进一步,最终通过在最后一英里中的一些sed处理实现csv格式。问题解决了。非常感谢!
db.results.aggregate([
  { "$project": {
    "_id": 0,
    "MYOPERATION": "$_id.MYOPERATION",
    "CURRENTSTATE": "$_id.CURRENTSTATE",
    "RULES._Rules.stringValue": "$_id.RULES._Rules.stringValue"
  }}
])
{
    "MYOPERATION": 1,
    "CURRENTSTATE" : "PROPOSED",
    "RULES" : {
        "_Rules" : {
                "stringValue" : [
                        "Y_RULES"
                ]
        }
    }
}