Mongodb 排除嵌套字段并仅投影少数字段
在这个JSON片段中,我只想检索3个字段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
\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"
]
}
}
}