删除 mongodb 数据库中的数组字段

delete array field in a mongodb database

我正在使用 mongoDB,我的 JSON(table 名字是 "student")看起来像

           [{
             name : "John",
             subjects:["English", "Maths"]
            },
            {
             name : "Winsel",
             subjects : ["Maths"]
            }]

这里 "subjects" 是其他一些 table 并且与学生相关联,我可以通过使用查找查询来获取数据,

student.find({}).populate('subjects').then(function(studentData){console.log(studentData)})

通过使用此查询,我可以获得数据

           [{
             name : "John",
             subjects:["English", "Maths"]
            },
            {
             name : "Winsel",
             subjects : ["Maths"]
            }]

之后我需要删除长度小于2的字段"subjects",我正在使用

             if(studentData.subjects.length < 2){
                 delete studentData.subjects
             }

但它不会删除该字段,当我不使用 if 条件时它显示相同的结果。 我的预期 JSON 是

      [{
         name : "John",
         subjects:["English", "Maths"]
        },
        {
         name : "Winsel"
        }]

谁能指导一下,先谢谢了

这对我有用。我不知道您是否正在使用 JSON 对象并且需要将其转换为 javascript 对象 (students.toObject()).

var students = studentsJSON.toObject();

var newStudents = students.map(studentData => {
    if(studentData.subjects.length < 2) {
        delete studentData.subjects;
    }
    return studentData;
});

试试这个代码

var data = [{
    name: "John",
    subjects: ["English", "Maths"]
  },
  {
    name: "Winsel",
    subjects: ["Maths"]
  }
];
console.log(data);
for (var i = 0; i < data.length; i++) {
  if (data[i].subjects.length < 2) {
    delete data[i].subjects;
  }
}
console.log(data);

要删除 json 响应中的字段,您可以在查询函数的回调函数中使用 delete

student.find({}).populate('subjects').then(function(studentData){
      var newData = studentData;

      newData.map(item => {
        if(item.subjects.length < 2) {
            delete item.subjects;
        }
        return item;
      })
      // you can use the newData here;

      })

我不知道你想在这里实现什么,但填充在应用程序级别工作。您可以使用 $project(或类似的 $addFields)和 $lookup

直接使用聚合管道
db.students.aggregate(

    [
        {
            $addFields: {
               subjects:{
                 $cond:[{$gte:[{$size:"$subjects"},2]},"$subjects",null]
               }
            }
        },
        {
            $lookup: {
                "from" : "subjects",
                "localField" : "subjects",
                "foreignField" : "name",
                "as" : "subjects"
            }
        },

    ]
);

从 mongodb 3.6 开始,您可以在 addFields 阶段使用 "$$REMOVE" 而不是 null 并且在 $lookup 之后你可以再次使用 $project 来删除空数组

试试这个

var studentsList = [{
                      name : "John",
                      subjects:["English", "Maths"]
                    },
                    {
                      name : "Winsel",
                      subjects : ["Maths"]
                   }];

var newStudentList = _.map(studentsList , function(eachStudentData){
                          if(eachStudentData.subjects <2){
                              return _.pick(eachStudentData, 'name');
                          } else {
                              return eachStudentData;
                          }
                     });

您可以将新形成的学生列表 newStudentList 用于您的代码