在下面的json中,我想找出几个不同节点下所有唯一/不同条目的计数。
我认为应该有一个非聚合框架解决方案,但我找不到聚合或非聚合。
对于每个节点,我可以使用:
db.collection.distinct('nodaA.title').length
并将“”替换为其他节点的相应字段。但我想通过1个查询来获取“ NodeB.subNoda1.author”,“ NodeB.subNode2.song”和“ NodeB.subNode3.picture”的计数。
我想得到类似
的结果
标题:1
作者:2
歌曲:3
图片:1
"nodaA": [
{
"title": "light",
"id" : 1
}
],
"NodeB": {
"subBnode1": [
{
"author": "Gazundheit"
},
{
"author": "Max Weasley"
}
],
"subBnode2": [
{
"song" : "what is love"
},
{
"song" : "gangster's paradise"
},
{
"song" : "wind is gone"
}
],
"subBnode3": [
{
"picture" : "inappropriate"
}
]
}
}
答案 0 :(得分:0)
正如NeilLunn指出的那样,这只能通过MapReduce完成,这就是我最终得到的结果:
地图:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory
android:title="Scenes">
<DropDownPreference
android:key="scenario"
android:title="Select scene"
android:summary="%s"
android:entries="@array/scenarios"
android:entryValues="@array/scenarios_values" />
</PreferenceCategory>
<PreferenceCategory
android:title="Demo">
<SwitchPreference
android:key="connect_on_startup"
android:title="Auto Connect"
android:defaultValue="false"
android:summary="Connect automatically at startup" />
<EditTextPreference
android:title="UserName"
android:key="username"
android:summary="Please provide your Username"
android:maxLines="1"
android:singleLine="true">
</EditTextPreference>
<EditTextPreference
android:inputType="textPassword"
android:title="Password"
android:key="password"
android:summary="Please provide your Password"
android:password="true" />
</PreferenceCategory>
减少:
function () {
emit("titles", this.title);
for (var key in this.nodeB) {
emit(key, this.nodeB[key]);
}
}
很抱歉,如果无法完全编译-我从实际数据中进行了修改,但这就是我所做的要旨,以防万一它可以帮助任何人。如果需要更多详细信息,请添加。