我的MongoDB集合中有一个深度嵌套的集合。
当我运行以下查询时:
db.countries.findOne({},{'data.country.neighbor.name':1,'_id':0})
我在这里得到了这个嵌套结果:
{"data" : {
"country" : [
{
"neighbor" : [
{
"name" : "Austria"
},
{
"name" : "Switzerland"
}
]
},
{
"neighbor" : {
"name" : "Malaysia"
}
},
{
"neighbor" : [
{
"name" : "Costa Rica"
},
{
"name" : "Colombia"
}
]
}
]
}}
现在,这就是我想要的:
['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']
或者这个:
{'name':['Austria', 'Switzerland', 'Malaysia', 'Costa Rica', 'Colombia']}
或者其他类似的东西…这可能吗?
在新的聚合框架下,这非常简单。$project和$unwind操作非常适合这个目的。
用更简单的方法,也许是最近
db.countries.aggregate({$unwind:'$data.country.neighbor.name'})
您可以使用$project
> db.countries.aggregate({$project:{a:'$data.country.neighbor.name'}},
{$unwind:'$a'},
{$unwind:'$a'},
{$group:{_id:'a',res:{$addToSet:'$a'}}})
{
"result" : [
{
"_id" : "a",
"res" : [
"Colombia",
"Malaysia",
"Switzerland",
"Costa Rica",
"Austria"
]
}
],
"ok" : 1
}
$展开
使用了两次,因为名称数组嵌套得很深。并且只有当邻居
属性是数组时,它才有效。在您的示例中,一个邻居字段(马来西亚)不是数组
问题内容: 在hibernate状态下,我想运行此JPQL / HQL查询: userDTO类: 用户实体: 但是当Hibernate 3.5(JPA 2)启动时,出现此错误: 结果是否可能包含列表(u.securityRoles)的选择? 我应该只创建2个单独的查询吗? 问题答案: 没有(选择标量值 和 集合值的路径表达式)的查询无效,因此我认为添加a 不会使事情起作用。 作为记录,这是JPA
问题内容: 结果集没有hasNext的方法。我想检查resultSet是否有任何值 这是正确的方法吗 问题答案: 没错,最初的光标指向第一行之前,如果第一次调用,则没有数据。 如果使用此方法,则由于它现在已定位在第一行之后,因此可能必须在复位后立即调用。 但是,应该注意的是,塞弗(Seifer)在下面的回答是对该问题的更优雅的解决方案。
我是聚合框架的新手,有以下问题。 我的收藏是这样的: 用户 ActivitiesFeed 活动 聚合函数 如何使用第一个查找结果进行查找? 我查阅了activities集合。此集合保存第二个查找BaseData.UserID的id。但是使用这种方法,第二次查找没有结果。 我对activities集合进行连接的原因是actionID可以保存来自另一个集合的用户id或文档id。它取决于activiti
问题内容: SASS具有一个称为的功能,该功能允许选择器继承另一个选择器的属性,但不复制属性(如mixins)。 LESS是否也具有此功能? 问题答案: 是的,Less.js推出的V1.4.0。 LESS没有实现SASS和Stylus使用的at- rule()语法,而是实现了伪类语法,这为LESS的实现提供了灵活性,使其可以直接应用于选择器本身或在语句内部。因此,这两个都将起作用: 要么 此外,您
问题内容: 谁能指出如何检查选择查询是否返回非空结果集? 例如,我有下一个查询: 我应该像下一个那样做吗: 测试结果集是否不为空? 问题答案: 使用@@ ROWCOUNT: 根据SQL Server联机丛书: 返回受最后一条语句影响的行数。如果行数超过20亿,请使用ROWCOUNT_BIG。
问题内容: 如果行达到一定数量,我想压缩结果。 然后,客户端程序将解压缩结果和过程。 这是具有客户端/服务器体系结构的桌面,某些客户端通过vpn连接。 客户端连接后,它将向服务器发送数据。服务器完成处理后,客户端将从服务器下载更新的数据。 客户位于几个城镇,平均50-100公里。离开。他们将使用vpn通过Internet连接。但这是使用vpn或其他方式实施的最初计划,但尚未实施。 问题答案: 有一