首页 > 解决方案 > MongoDB:扁平数组测验

问题描述

我有一些关于用户查看和购买某些商品的数据。这是我的 mongodb 集合示例:

{
    "_id" : ObjectId("blah"),
    "user" : "u1111",
    "items_viewed" : ["i1111", "i12345"],
    "items_buyed" : ["i12345"]
}

我想要一个扁平版本,如下例所示:

{
     "user" : "u1111",
     "item" : "i1111",
     "buyed": 0
}

{
     "user" : "u111",
     "item" : "i12345",
     "buyed" : 1
}

如果该项目在 items_buyed 数组中,它应该在“buyed”字段中有 1,如果它只在“items_viewed”中 - 0。

请告诉我该怎么做?

标签: mongodb

解决方案


// Aggregation Pipeline Stages
[
    // Stage 1
    {
        $match: {
            "_id" : "1"
        }
    },

    // Stage 2
    {
        $unwind: {
            path : "$items_viewed",
        }
    },

    // Stage 3
    {
        $project: {
            "item" :  "$items_viewed",
            "buyed" : {
                        $cond: { 
                          if: {
                             $in: [ "$items_viewed" , "$items_buyed" ] 
                          }, then: 1, else: 0 }
                      }
        }
    },

]

);


推荐阅读