0

我有一组子文档,如下所示

    /* 记录 1 */
        {
                        “_id”:“462044”,
                        “程序” : [
                                {
                                    “名称”:“商业服务”
                                },
                                {
                                    “名称”:“国土安全”
                                },

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“工程”
                                },

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“计算机软件”
                                }
                                ]

            }

    /* 记录 2 */
            {
                        “_id”:“462045”,
                        “程序” : [
                                {
                                    “名称”:“商业服务”
                                },
                                {
                                    “名称”:“国土安全”
                                },

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“工程”
                                },

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“计算机软件”
                                }
                                ]

            }      

[我想删除没有'title'子成员的数组成员]

如何编写 mongo 更新查询或 nodejs 函数来获取以下文档集

    /* 记录 1 */
        {

                        “_id”:“462044”,
                        “程序” : [

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“工程”
                                },

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“计算机软件”
                                }
                                ]

        }


    /* 记录 2 */
        {
                        “_id”:“462045”,
                        “程序 [
                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“工程”
                                },

                                {
                                    “标题” : [
                                        “联系”
                                    ],
                                    “名称”:“计算机软件”
                                }
                                ]

        }      

4

1 回答 1

0

嗯,首先你的文档结构看起来很奇怪。在您的情况下,每条记录都有一个表示基本相同信息的不同字段,school1并且school2.

如果您将这些字段重命名为 just ,则可以轻松修复它school

如果您修复了文档结构,您可以借助聚合框架和普通更新查询轻松消除所需的子文档。

例子:

db.collection.aggregate([
  {
    $project: {
      school: {
        $filter: {
          input: "$school.program",
          as: "prog",
          cond: {
            $ne: [
              {
                $ifNull: [
                  "$$prog.title",
                  true
                ]
              },
              true
            ]
          }
        }
      }
    }
  }
]).forEach(function(o){
  db.collection.updateOne({
    _id: o._id
  },
  {
    $set: {
      school: o.school
    }
  });
})

这会将您的旧文档转换为(删除所有子字段表单程序不包含title

{ 
    "_id" : ObjectId("57371cdf81e9959ba1a5fab0"), 
    "school" : [
        {
            "title" : [
                "associate"
            ], 
            "name" : "Engineering"
        }, 
        {
            "title" : [
                "associate"
            ], 
            "name" : "Computer Software"
        }
    ]
}
{ 
    "_id" : ObjectId("57371cdf81e9959ba1a5fab1"), 
    "school" : [
        {
            "title" : [
                "associate"
            ], 
            "name" : "Engineering"
        }, 
        {
            "title" : [
                "associate"
            ], 
            "name" : "Computer Software"
        }
    ]
}
于 2016-05-14T14:41:15.093 回答