2015-10-07 106 views
1

选择特定索引字段我希望在"comment_count"= 1MongoDB中

我已经试过此查询上,例如特定的索引只选择了“thetext”字段:

db.getCollection('mongotesi').find({},{'bug.long_desc.1.thetext':'1'})

我想秀所有的“thetext”字段也是如此。 这是JSON结构:

{ 
    "_id" : ObjectId("5613c8acc8e53ab811000083"), 
    "@attributes" : { 
     "version" : "4.4.10", 
     "urlbase" : "https://bugs.documentfoundation.org/", 
     "maintainer" : "[email protected]" 
    }, 
    "bug" : { 
     "bug_id" : "31585", 
     "creation_ts" : "2010-11-12 08:55:00 +0000", 
     "long_desc" : [ 
      { 
       "@attributes" : { 
        "isprivate" : "0" 
       }, 
       "commentid" : "194230", 
       "comment_count" : "0", 
       "attachid" : "40242", 
       "who" : "eric.moret", 
       "bug_when" : "2010-11-12 08:55:52 +0000", 
       "thetext" : "Created attachment 40242ooo base fileI am running ooo 3.2.1 OOO320m18 (Build:9502). I am using an odb bas file to perform a mail merge on an odt file under writer. In the mail merge Wizard, on hitting Next in step 6. (Edit Document), the Status window - creating document opens up and generates my mailing. The crash happens reliably while performing this task. I have 118 items to generate.My error report id is: rpmrd6nAttached are the 2 files used for this merge." 
      }, 
      { 
       "@attributes" : { 
        "isprivate" : "0" 
       }, 
       "commentid" : "194232", 
       "comment_count" : "1", 
       "attachid" : "40243", 
       "who" : "eric.moret", 
       "bug_when" : "2010-11-12 08:56:29 +0000", 
       "thetext" : "Created attachment 40243ooo write file" 
      },  
     ], 
    } 
} 
+0

我问昨天的东西非常相似,答案是否定的,蒙戈不支持这个呢。如果你喜欢,我可以为你提供参考和工具。 –

+0

这里是我的问题:http://stackoverflow.com/questions/32976362/does-mongodb-have-a-path-wildcard?noredirect=1#comment53778683_32976362我使用节点模块“树数学”切片和切块数据出来时。免责声明:我写了树数学。推广:树数学很棒。 –

+0

不是返回确切的键值,而是使用[slice]返回特定的位置数组。 – Yogesh

回答

1

阵列采取的[跳过,极限]的形式,其中第一个值表示要跳过的数组中的项目数,第二个值表示要返回的项目数。

使用$slice查询将查找第一个数组对象

db.collection.find({},{"bug.long_desc":{"$slice":[0,1]},"@attributes":0}) 

,如果你发现了第二个对象,然后跳过第一个对象是这样

db.collection.find({},{"bug.long_desc":{"$slice":[1,2]},"@attributes":0}) 

编辑

如果打印精确匹配的文本,然后使用forEach为:

db.collection.find({},{"bug.long_desc":{"$slice":[0,1]},"@attributes":0}).forEach(function(doc){print(doc.bug.long_desc[0].thetext);}) 
+0

好的,非常感谢。现在,如果我只想“thetext”打印,我该怎么办? 'db.mongotesi.findOne({},{“bug.long_desc”:{$ slice:[0,1]}})。bug.long_desc' next“.bug.long_desc”我需要添加什么? - –

+0

@ J.arc检查已编辑的答案以打印完全匹配的密钥,然后使用forEach进行查询 – Yogesh

0

蒙戈没有做到这一点,但是这将这样的伎俩:

var tm = require('tree-math'); 
var long_desc=db.getCollection('mongotesi').find({},{'bug.long_desc':'1'}); 
var bugtext = {}; 
tm.find(long_desc,function(path,val {if(path[3]==='thetext')tm.setPath(bugtext,path,val);}); 
console.log(JSON.stringify(bugtext,null,2)); 
+0

谢谢,但林使用R语言,建议? –