我遇到的情况是我必须根据请求从数组中提取多个值。
数据库中的事物状态:
select *
from (select *
from <table>
order by id asc)
where rownum <= 20
minus
select *
from (select *
from <table>
order by id asc)
where rownum <= 10
请求列出了我必须从数据库阵列中删除的多个端点。 JSON请求的示例:
{
"_id" : ObjectId("56fb8fdf5e3227c637891ca8"),
"description" : "Testing service",
"name" : "test-service",
"endpoints" : [
{
"uri" : "/api/test1",
"method" : "GET",
"description" : "test1",
"noAuthRequired" : true,
"allowedByDefault" : true,
"allowedRoles" : ['admin']
},
{
"uri" : "/api/test2",
"method" : "GET",
"description" : "test2",
"noAuthRequired" : true,
"allowedByDefault" : true,
"allowedRoles" : ['admin']
},
{
"uri" : "/api/test3",
"method" : "GET",
"description" : "test3",
"noAuthRequired" : true,
"allowedByDefault" : true,
"allowedRoles" : ['admin']
}
]
}
当此请求到来并被处理时,它应该使用URI / api / test1和方法GET删除端点。它不应该使用URI / api / test2删除端点,并且方法GET beacuse请求声明POST / api / test2应该被删除,因为它不存在于DB中,只有GET / api / test1被删除。
我尝试过这样做,使用Mongoose:
{
"endpoints": [{
"uri": "/api/test1",
"method": "GET"
},
{
"uri": "/api/test2",
"method": "POST"
}]
}
这根本不起作用。
router.route('/services/:id/endpoints').delete(function(req, res) {
...
model.service.findOneAndUpdate({ '_id': req.params.id },
{ $pull: { 'endpoints': req.body.endpoints } },
function(err, srv) {
...
});
});
这也没什么用。
router.route('/services/:id/endpoints').delete(function(req, res) {
...
model.service.findOneAndUpdate({ '_id': req.params.id },
{ $pullAll: { 'endpoints': req.body.endpoints } },
function(err, srv) {
...
});
});
这将删除DB中的所有端点,它不应该。
我已经决定使用async:
router.route('/services/:id/endpoints').delete(function(req, res) {
...
model.service.findOneAndUpdate({ '_id': req.params.id },
{ $pullAll: { 'endpoints': { $in: req.body.endpoints } } },
function(err, srv) {
...
});
});
这样可行,但我想在单个mongoose查询中没有异步的情况下这样做。有办法吗?
谢谢:)