删除 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 用于您的代码
我正在使用 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 用于您的代码