1

我有一个集合,示例数据是这样的,

{ L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"images", K:"asdd " } { L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"images", K: "asdd" } { L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"images", K:"asdd" } { L:"图片", K:"asdd" }

和其他字段是,{L:"cars",K:"asdff"},{L:"table",K:"asgeg"} 这些字段也至少有 20 个文档,结果我想要的是这样

{ L:"图像", K:"asdd" } { L:"图像", K:"asdd" }

{ L:"汽车", K:"asdd" } { L:"汽车", K:"asdd" }

{ L:"table", K:"asdd" } { L:"table", K:"asdd" }

我想根据他们的 L 字段获取文档,但我想将每个字段的结果限制为两个,我不知道如何管理这个,谢谢你的回复:)

4

1 回答 1

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);
        }
    )
})

我使用 distinct 来生成这三个值,但您可以轻松地将其作为数组传入第一行,如下所示:

['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" }
于 2012-11-19T04:11:05.637 回答