Для веб-API вы можете добавить параметр привязки обязательных параметров в WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
//...
config.ParameterBindingRules.Insert(0, GetCustomParameterBinding);
//...
}
public static HttpParameterBinding GetCustomParameterBinding(HttpParameterDescriptor descriptor)
{
if (descriptor.ParameterType == typeof(ObjectId))
{
return new ObjectIdParameterBinding(descriptor);
}
// any other types, let the default parameter binding handle
return null;
}
public class ObjectIdParameterBinding : HttpParameterBinding
{
public ObjectIdParameterBinding(HttpParameterDescriptor desc)
: base(desc)
{
}
public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
{
try
{
SetValue(actionContext, new ObjectId(actionContext.ControllerContext.RouteData.Values[Descriptor.ParameterName] as string));
return Task.CompletedTask;
}
catch (FormatException)
{
throw new BadRequestException("Invalid ObjectId format");
}
}
}
}
И использовать его без каких-либо дополнительных атрибутов в контроллере:
[Route("{id}")]
public IHttpActionResult Get(ObjectId id)
return n.name, count(distinct n.name)
означает «вернуть каждое отдельное значение n.name
и его количество разных значений». Число всегда должно быть 1, так как отличное значение, очевидно, различно.
Если вы на самом деле ищете, сколько раз у каждого человека были исходящие отношения с фильмом, название которого указано в $mycollection
, сделайте это вместо этого (где count(*)
подсчитывает количество совпадений с данным n.name
). ):
MATCH (n:person)-->(m:movie)
WHERE m.Title in $mycollection
RETURN n.name, count(*);
Обратите внимание, что в приведенном выше запросе пропущен шаблон [watched]
, найденный в вашем запросе, поскольку этот синтаксис (без двоеточия до watched
) вообще не фильтрует. Он просто присваивает отношение переменной с именем watched
, но эта переменная не используется иначе, и поэтому является излишней.
Если вы намеревались использовать watched
в качестве типа отношения, то сделайте это вместо:
MATCH (n:person)-[:watched]->(m:movie)
WHERE m.Title in $mycollection
RETURN n.name, count(*);
Этот измененный запрос возвращает количество раз, когда каждый человек смотрел фильм с названием в $mycollection
. ]