繁体   English   中英

如何根据JS中的条件更新/删除数组中的object?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM