2012-11-16 52 views
1

我有一个集合和实例的数据都是这样的,

{ L: “图像”, K: “asdd” } { L: “图像” , K: “asdd” } { L: “图像”, K: “asdd” } { L: “图像”, K: “asdd” } { L:“图像“, K:”asdd“ } { L: “图像”, K: “asdd” } { L: “图像”, K: “asdd” } { L: “图像”, K:“asdd “ } { L:” 图像 “ K: ”asdd“ } { L: ”图像“, K: ”asdd“ } { L: ”图像“, K:” asdd“ } { L: “图像”, K: “asdd” } { L: “图像”, K: “asdd” }

和其它字段是,{L: “汽车”,K: “asdff”},{L: “表”,K: “asgeg”}这些领域至少有20个文档太多,我要的结果是这样的

{ L: “图像”, ķ : “asdd” } { L: “图像”, K: “asdd” }

{ L: “汽车”, K: “asdd” } { L: “汽车”, K: “asdd” }

{ L: “表”, K: “asdd” } { L:“表”, K:“asdd” }

我想根据自己的L字段的文件,但我想每一个领域的结果限制为两年我不知道如何管理这个,谢谢你的回复:)

+0

我试过db.user.find(“L”=> array('$ in'=> array(“cars”,“table”,“images”))) - > limit(30) – user1794257

+0

no ,有一些名为“L”的字段,它们有不同的值,但我只需要收集2个表格,2个图像和2个车辆 – user1794257

+0

行,所以如果这是单个文档中的数组(而不是文档的集合) ,如果查询使它们成为集合中的文档而不是条目数组,它会不会更高效和更容易?当你说“文档”时,你的意思是数组中的“对象”项吗? – cirrus

回答

1

鉴于你的模式,我不认为有一种方法,在一个单一的查询,做你想做的。我建议使用一个简单的foreach循环或类似的PHP脚本来提取您想要的值,因为您将其标记为PHP。

当然,你可以用3个单独的查询来做到这一点,每个L值一个,限制为2个。我假设我们真的在谈论很多不同的值,而不仅仅是列出的三个值。我不是一个PHP的家伙,所以我不能帮你,但你可以像这样使用shell的JavaScript功能(我把你的示例数据加载到一个名为foo的集合中,它有一个_id字段自动添加):

db.foo.distinct("L").forEach(function(key) { 
    db.foo.find({"L" : key}, {_id : 0}).limit(2).forEach(
     function (value) { 
      printjson(value); 
     } 
    ) 
}) 

我以前不同,以产生三个值,但你可以很容易地只通过它在作为第一行的阵列,像这样:

['images', 'cars', 'table'].forEach(function(key) { 

无论哪种方式,所述函数给了我以下输出:

{ "L" : "images", "K" : "asdd" } 
{ "L" : "images", "K" : "asdd" } 
{ "L" : "cars", "K" : "asdd" } 
{ "L" : "cars", "K" : "asdd" } 
{ "L" : "table", "K" : "asdd" } 
{ "L" : "table", "K" : "asdd" } 
+0

感谢您的回答,帮助我了很多:) – user1794257