[英]How to remove key based on condition in array object javascript
[英]How to update/remove object in array based on condition in JS?
我在 nodejs 中有以下查询,如果用户通过了跳过和限制值。 我必须更新它,否则我必须从查询中删除那些
[
{
"$match": {"PaymentStatus" : "Submitted"}
},
{
"$sort": {
"Date": -1
}
},
{
"$skip": "$skip"
},
{
"$limit": "$limit"
},
{
"$lookup": {
"from": "bookings",
"localField": "_id",
"foreignField": "",
"as": "bookings"
}
},
{
"$lookup": {
"from": "users",
"localField": "bookings.user_id",
"foreignField": "_id",
"as": "User"
}
},
{
"$project": {
"_id": 0,
"Number": "$Number",
"Status": "$bookings.Status",
"User": "$bookings.AssignedTo",
"VendorName": "$booking.username",
"SystemID": "$booking._id"
}
}
]
if (skip && limit)// 跳过 100 并限制 300
查询(输出)应该是
[
{
"$match": {"PaymentStatus" : "Submitted"}
},
{
"$sort": {
"Date": -1
}
},
{
"$skip": 100
},
{
"$limit": 300
},
{
"$lookup": {
"from": "bookings",
"localField": "_id",
"foreignField": "",
"as": "bookings"
}
},
{
"$lookup": {
"from": "users",
"localField": "bookings.user_id",
"foreignField": "_id",
"as": "User"
}
},
{
"$project": {
"_id": 0,
"Number": "$Number",
"Status": "$bookings.Status",
"User": "$bookings.AssignedTo",
"VendorName": "$booking.username",
"SystemID": "$booking._id"
}
}
]
否则我们必须从查询中删除这两项
[
{
"$match": {"PaymentStatus" : "Submitted"}
},
{
"$sort": {
"Date": -1
}
},
{
"$lookup": {
"from": "bookings",
"localField": "_id",
"foreignField": "",
"as": "bookings"
}
},
{
"$lookup": {
"from": "users",
"localField": "bookings.user_id",
"foreignField": "_id",
"as": "User"
}
},
{
"$project": {
"_id": 0,
"Number": "$Number",
"Status": "$bookings.Status",
"User": "$bookings.AssignedTo",
"VendorName": "$booking.username",
"SystemID": "$booking._id"
}
}
]
我们应该怎么做? 请帮我解决一下这个。 这些是正确的方法吗? 工作代码如下,但需要建议
下面是我从查询中删除项目的代码。
var myArray = query.filter(function( obj ) {
return obj.$skip !== '$skip'&& obj.$limit !== '$limit'
});
此外,更新查询如下
var a = 100 ;
var b = 300;
const newArr = query.map(obj => {
if (obj.$skip=== '$skip') {
return {...obj, $skip: a};
}
if (obj.$limit=== '$limit') {
return {...obj, $limit: b};
}
return obj;
});
console.log(newArr)
如果您想基于跳过和限制更新查询,您可以根据条件推送该字段 -
const query = [
{
"$match": {"PaymentStatus" : "Submitted"}
},
{
"$sort": {
"Date": -1
}
},
{
"$lookup": {
"from": "bookings",
"localField": "_id",
"foreignField": "",
"as": "bookings"
}
},
{
"$lookup": {
"from": "users",
"localField": "bookings.user_id",
"foreignField": "_id",
"as": "User"
}
},
{
"$project": {
"_id": 0,
"Number": "$Number",
"Status": "$bookings.Status",
"User": "$bookings.AssignedTo",
"VendorName": "$booking.username",
"SystemID": "$booking._id"
}
}
]
并将数据推送为:-
if (skip && limit) {
query.splice(2, 0, {
"$limit": limit
})
query.splice(2, 0, {
"$skip": skip
})
}
它应该适合你。
据我了解,如果未定义值,您想从数组中删除skip
和/或limit
对象,您可以过滤此数组
var myArray = query.filter(function( obj ) {
if ('$skip' in obj && !obj.$skip) {
return false;
}
if ('$limit' in obj && !obj.$limit) {
return false;
}
return true;
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.