如何只将选定的字段放入 mongo 数组

托本鲁德加德

有一个代理表 - 每个代理可以有多个用户 我想要 users[] 数组,但只有有限的字段

这个有效,但它把太多的信息放入 users[] 数组......

    agencyTable.aggregate([
            {
                $match: {}
            },
            {
                $sort: {
                    activityDate: 1
                }
            },              
            {
                $lookup: {
                    from: "users",
                    localField: "_id",
                    foreignField: "agency", 
                    as: "users"     
                }   
            },
            { $unwind: "$users" },
            { $match: { 'users.type': 'agent' } }, 
            {
                $group: {
                    "_id": "$_id",
                    "phone": { "$first": "$phone" },
                    "activityDate": { "$first": "$activityDate" },
                    "users": { "$push": "$users" }
                }
            },  
            {
                $project: {
                    "_id" : 1,
                    "phone" : 1,
                    "activityDate" : 1,
                    "users" : 1
                    // "userID" : "$users._id",
                    // "userName" : "$users.name",
                    // "userPhone" : "$users.phone",
                }
            }]

然后我尝试取消注释较低的 3 行,但随后发生了一些奇怪的事情......

vm.agencyRecord : [
    {
        "_id": "Mic Agency Ltd",
        "phone": "ZZZZ",
        "activityDate": 1521460192,
        "userID": [
            "[email protected]",
            "[email protected]",
            "[email protected]",
            "[email protected]",
            "[email protected]",
            "[email protected]"
        ],
        "userName": [
            "Michael Agent",
            "Nana Banana",
            "Gogo Banana",
            "Wollah Woldsom",
            "weqweqweqwe",
            "werwer"
        ],
        "userPhone": [
            "99 22 99 22 33",
            "111 222 999",
            "111 222 999",
            "234234234",
            "34234234234",
            "werwerwer"
        ]
    },

因为那不是我想要的。我想保留相同的用户数组,但字段要少得多。

那有可能吗?

s7vr

使用$map限制领域。

$$访问usr用户变量以引用元素的语法,然后是您希望保留的字段映射。

就像是

{
  "$project":{
    "_id":1,
    "phone":1,
    "activityDate":1,
    "users":{
      "$map":{
        "input":"$users",
        "as":"usr",
        "in":{
          "userID":"$$usr._id",
          "userName":"$$usr.name",
          "userPhone":"$$usr.phone"
        }
      }
    }
  }
}

您可以使用$addFieldsstage 而不是$projectstage来简化聚合

{
   "$addFields":{
      "users":{
        "$map":{
           "input":"$users",
           "as":"usr",
           "in":{
              "userID":"$$usr._id",
              "userName":"$$usr.name",
              "userPhone":"$$usr.phone"
            }
         }
      }
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从角度更新mongo数组字段

来自分类Dev

如何让mongo返回字段中的数组?

来自分类Dev

Mongo查询数组内的嵌套字段。

来自分类Dev

Mongo查询数组内的嵌套字段。

来自分类Dev

省略数组mongo查询中的某些字段

来自分类Dev

如何在Mongo聚合中合并文档中的数组字段

来自分类Dev

如何在Mongo DB中合并数组和文档字段

来自分类Dev

基于非数组字段在mongo文档中投影数组值

来自分类Dev

如何在Mongo聚合中折叠数组?

来自分类Dev

如何加入ID数组的mongo查询?

来自分类Dev

如何编写查询数组的 mongo 查询?

来自分类Dev

从其他字段更新mongo数组元素字段

来自分类Dev

Mongo更新数组内部对象的多个字段

来自分类Dev

Mongo DB $查找数组中字段而不是集合的方法

来自分类Dev

Mongo DB在切片之前反转数组字段

来自分类Dev

mongo在数组字段中找到var的位置

来自分类Dev

将字段与数组的任何元素匹配的Mongo查询

来自分类Dev

在mongo中查找数组字段的最大值

来自分类Dev

如何根据将字段与数组Mongo匹配来有条件地添加字段

来自分类Dev

Mongo文档到数组

来自分类Dev

查询嵌套Mongo数组

来自分类Dev

使用 $and, $or 查询 Mongo 数组

来自分类Dev

在Mongo集合中,如何查询数组中的特定对象?

来自分类Dev

如何查询包含嵌套数组子集的mongo文档

来自分类Dev

如何在Mongo DB中合并文档数组

来自分类Dev

如何在mongo中查找不包含数组元素的文档

来自分类Dev

mongo:如何检索与数字或数组类型完全匹配的文档?

来自分类Dev

如何删除数组中mongo对象的属性?

来自分类Dev

如何在Mongo DB中将数组值与键名合并