Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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 - Fatal编程技术网

使用组()的mongodb查询?

使用组()的mongodb查询?,mongodb,Mongodb,这是我的收藏结构: coll{ id:..., fieldA:{ fieldA1:[ { ... } ], fieldA2:[ { text: "ciao", }, { text: "hello", }, ] } } 我想提取集合中的所有字段a2,但如果字段a2处于两次或两次以上中,我只想显示一次 我试试

这是我的收藏结构:

coll{
id:...,   
fieldA:{
   fieldA1:[
       {
           ...
       }
   ], 
   fieldA2:[
       {
           text: "ciao",
       },
       {
           text: "hello",
       },   
   ] 
} 
}
我想提取集合中的所有
字段a2
,但如果
字段a2
处于
两次或两次以上
中,我只想显示
一次

我试试这个

Db.runCommand({distinct:’coll’,key:’fieldA.fieldA2.text’}) 
但什么都没有。这将返回集合中的所有
filedA1

所以我试着

db.coll.group( {

               key: { 'fieldA.fieldA2.text': 1 },

               cond: { } },

               reduce: function ( curr, result ) { },

               initial: { }

            } )
但这将返回一个空数组


我如何才能做到这一点,并看到执行时间??非常感谢您,match…

因为您正在运行2.0.4(我建议升级),所以您必须通过MR运行此功能(我认为,可能有更好的方法)。比如:

map = function(){
    for(i in this.fieldA.fieldA2){
        emit(this.fieldA.fieldA2[i].text, 1); 
        // emit per text value so that this will group unique text values
    }
}

reduce = function(values){
    // Now lets just do a simple count of how many times that text value was seen
    var count = 0;

    for (index in values) {
        count += values[index];
    }

    return count;
}
然后将为您提供一个文档集合,
\u id
字段a2
中唯一的
文本
值,
字段是集合中出现的次数


同样,这是一份草稿,没有经过测试。

我认为答案比地图/缩略图简单。。如果您只需要不同的值加上执行时间,则以下操作应该有效:

var startTime = new Date()
var values    = db.coll.distinct('fieldA.fieldA2.text');
var endTime   = new Date();

print("Took " + (endTime - startTime) + " ms");
这将产生一个
数组,其中包含不同的字段a.fieldA2.text值列表:

[ "ciao", "hello", "yo", "sayonara" ]
以及报告的执行时间:

Took 2 ms

fieldA
仅显示
fieldA1
及其内容的3个点,但在您的组中,您显示希望在该字段内的
文本的子字段上分组。
字段1的真实结构是什么?您能为示例性输入添加所需的输出吗?Sammaye:对不起。。我想在fieldA2上分组。textGrzegorz:我想要这样的列表:再见,你好。。。,所有这些只有一次。然后是查询执行时间,我相信使用聚合框架,您可能可以执行以下操作:
db.col.aggregate({$project:{“fieldA.fieldA2”:1},{$unwind:$fieldA.fieldA2”},{$group:{id:$fieldA.fieldA2.text})这是未经测试的,我只是把它与内存放在一起,以获得答案。。我尝试了您的代码,但出现了以下错误:map reduce失败:{“assertion”:“内存中的map/reduce数据太多”,“assertionCode”:13604,“errmsg”:“db assertion failure”,“ok”:0}@alesio1985太糟糕了,那么stennies的答案呢?我知道你以前试过distinct,但我相信如果你试一下他的例子,它会起作用的