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

时间:2017-12-13 07:15:49

标签: javascript node.js mongodb mongodb-query sails.js

我正在使用mongoDB和我的JSON(表名是"学生")看起来像

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

这里"科目"是一些其他表和与学生相关联,我能够通过使用查询查询获取数据,

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

通过使用此查询,我可以将数据作为

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

之后我需要删除字段&#34; subject&#34;长度小于2,我正在使用

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

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

$(window).scroll(function() {
  sessionStorage.scrollTop = $(this).scrollTop();
});

$(document).ready(function() {
  if (sessionStorage.scrollTop != "undefined") {
    $(window).scrollTop(sessionStorage.scrollTop);
  }
});

任何人都可以指导我,提前致谢

5 个答案:

答案 0 :(得分:2)

要删除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;

      })

答案 1 :(得分:1)

试试这个

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作为您的代码

答案 2 :(得分:0)

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

var students = studentsJSON.toObject();

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

答案 3 :(得分:0)

试试这段代码

&#13;
&#13;
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);
&#13;
&#13;
&#13;

答案 4 :(得分:0)

我不知道你想在这里实现什么,但是在应用程序级别上填充了作品。您可以使用$ 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删除空数组