【发布时间】:2014-06-16 14:35:16
【问题描述】:
嗨,我的 mongo 收藏包含以下文档:
{
"_id" : ObjectId("539efd5b254bb5f65c9da94e"),
"iInfo" : [
{ "ifout" : 0, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 10, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 4, "ifdes" : "N/A", "ifRemotePort" : "0", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 }
]
}
{
"_id" : ObjectId("539efd76254bb5f65c9da94f"),
"iInfo" : [
{ "ifout" : 0, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 7, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 4, "ifdes" : "N/A", "ifRemotePort" : "0", "ifin" : 0 },
{ "ifout" : 110, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 }
{ "ifout" : 90, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 }
]
}
{
"_id" : ObjectId("539efed7254bb5f65c9da950"),
"iInfo" : [
{ "ifout" : 10, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 10, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 4, "ifdes" : "N/A", "ifRemotePort" : "0", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 }
]
}
{
"_id" : ObjectId("539efeed254bb5f65c9da951"),
"iInfo" : [
{ "ifout" : 0, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 10, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 0, "iferror" : 4, "ifdes" : "N/A", "ifRemotePort" : "0", "ifin" : 0 },
{ "ifout" : 100, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 },
{ "ifout" : 210, "iferror" : 0, "ifdes" : "N/A", "ifin" : 0 }
]
}
现在我想对这些文档进行如下排序:
{
"_id" : ObjectId("539efeed254bb5f65c9da951"),
"iInfo" : [
{ "out" : 210,"iferror" : 0,"ifdes" : "N/A","ifin" : 0}
]
}
{
"_id" : ObjectId("539efd76254bb5f65c9da94f"),
"iInfo" : [
{ "out" : 110,"iferror" : 0,"ifdes" : "N/A","ifin" : 0}
]
}
{
"_id" : ObjectId("539efeed254bb5f65c9da951"),
"iInfo" : [
{ "out" : 100,"iferror" : 0,"ifdes" : "N/A","ifin" : 0}
]
}
{
"_id" : ObjectId("539efed7254bb5f65c9da950"),
"iInfo" : [
{ "out" : 90,"iferror" : 0,"ifdes" : "N/A","ifin" : 0}
]
}
为此,我将我的 mongo 查询编写如下
db.demo.aggregate([
{ "$project": { "_id": 1, "out": "$iInfo.ifout"} },
{ "$unwind": "$out" },
{ "$sort": { "_id": 1, "out": -1 } },
{ "$group": { "_id": "$_id" , "iInfo": { "$push": { "out":"$out" } } } }
])
上面的查询返回如下输出:
{
"_id" : ObjectId("539efeed254bb5f65c9da951"),
"iInfo" : [
{ "out" : 100 },
{ "out" : 0 },
{ "out" : 0 },
{ "out" : 0 }
]
}
{
"_id" : ObjectId("539efed7254bb5f65c9da950"),
"iInfo" : [
{ "out" : 10 },
{ "out" : 0 },
{ "out" : 0 },
{ "out" : 0 }
]
}
{
"_id" : ObjectId("539efd76254bb5f65c9da94f"),
"iInfo" : [
{ "out" : 90 },
{ "out" : 0 },
{ "out" : 0 },
{ "out" : 0 }
]
}
{
"_id" : ObjectId("539efd5b254bb5f65c9da94e"),
"iInfo" : [
{ "out" : 0 },
{ "out" : 0 },
{ "out" : 0 },
{ "out" : 0 }
]
}
那么,如何使用 mongo 和 java 代码获得期望的输出?
【问题讨论】:
-
您使用的是 Java 驱动程序吗?您的查询代码是 JavaScript,将从终端运行...
-
嗨@Kyte我也使用了java驱动器,但我想要mongo和java中的两个查询。我在java中尝试过,但没有找到任何解决方案。
-
这个问题可能对stackoverflow.com/questions/12296963/…有帮助,或者这个问题可能对stackoverflow.com/questions/18023160/…有帮助
标签: java mongodb aggregation-framework mongo-java