mongodb - 指定返回格式

标签 mongodb projection

mongo 有没有办法让我指定返回数据的格式?

如果可能的话,我希望能够以数组形式返回项目。让我们看一下这个非常基本的示例:

{
    color: red
},
{
    color: white
},
{
    color: blue
}

因此,对于这个示例,我想将上述文档作为数组获取:

{
    colors: [red, white, blue]
}

有没有办法指定如何返回?我知道我可以指定要获取哪些列,但随后我必须循环遍历它们来构建数组。我希望 mongodb 内置了这个功能,因为它可能比 Node、php、java 等更快。

最佳答案

使用aggregation framework 。聚合管道只会有一个 $group操作所在$addToSet运算符将值添加到数组中。例如,对于包含示例文档的集合:

/* 1 */
{
    "_id" : ObjectId("553c0101dddf8dcf96bdcdea"),
    "color" : "red"
}

/* 2 */
{
    "_id" : ObjectId("553c0101dddf8dcf96bdcdeb"),
    "color" : "white"
}

/* 3 */
{
    "_id" : ObjectId("553c0101dddf8dcf96bdcdec"),
    "color" : "blue"
}

以下聚合

db.collection.aggregate([
    {
        "$group": {
            "_id": 0,
            "colors": {
                "$addToSet": "$color"
            }
        }
    },
    {
        "$project": {
            "_id": 0,
            "colors": 1
        }
    }
])

将产生所需的输出:

/* 1 */
{
    "result" : [ 
        {
            "colors" : [ 
                "blue", 
                "white", 
                "red"
            ]
        }
    ],
    "ok" : 1
}

关于mongodb - 指定返回格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29870663/

相关文章:

mongodb - MongoDB 的 fsync 是做什么用的?

node.js - 错误: timeout of 2000ms exceeded. 确保在此测试中调用done()回调

projection - 光线追踪相机 - 正交到透视投影

java - 将 2D 屏幕坐标取消投影到 3D 世界坐标

mongodb - 仅检索 MongoDB 集合中对象数组中的查询元素

javascript - 如何在 Mongoose 中构建条件查询?

php - 确保多维数组上的索引索引 mongodb 字段的正确方法是什么?

node.js - 如何使用mongoose在mongodb中使用纬度和经度查找附近的点

python - Python 中不同深度的多个 3D 对象的透视投影

linq - Subsonic 3 LINQ 投影问题,修复还是没有?