Фильтр, если совпадение существует в массиве

#c# #mongodb #mongodb-query

#c# #mongodb #mongodb-запрос

Вопрос:

Когда я изменил свой фильтр, чтобы выбрать только ArtistDocument тот, который artist_ID содержит совпадение в artistIds массиве, я получаю следующую ошибку.

«Дерево выражений не поддерживается: {document}{artist_ID}» Система.Исключение {System.Исключение NotSupportedException}

 // array.
string[] artistsIds = new string[] { "123ABC", "456XYZ" };

// filter.
var filter = Builders<ArtistsDocument>.Filter.Where(p => p.artist_ID.Any(b => artistsIds.Contains(b.ToString())));
filter = filter amp; Builders<ArtistsDocument>.Filter.Eq("genre", "Rock");
filter = filter amp; Builders<ArtistsDocument>.Filter.Lt(x => x.transactionDate, DateTime.Now.AddSeconds(Math.Abs(30) * (-1)));

// update.
var update = Builders<ArtistsDocument>.Update.Set("status", "Processing");

// options.
var options = new FindOneAndUpdateOptions<ArtistsDocument>
{
    Sort = Builders<ArtistsDocument>.Sort.Ascending(x => x.fileName).Ascending(x => x.priority),
    ReturnDocument = ReturnDocument.After
};

// document.
var doc = await artistsCollection.FindOneAndUpdateAsync(filter, update, options);
  

Ответ №1:

Я считаю, что вы можете достичь того, чего хотите, с помощью elemMatch

 Builders<ArtistsDocument>.Filter.ElemMatch
  

что-то вроде этого:

 var elemMatchFilter = Builders<YourModel>
    .Filter
    .ElemMatch(x => x.YourArray, x => x.ArrayField1 == field1 amp;amp; x.x.ArrayField2 == field2);
  

Комментарии:

1. Есть ли для этого обратное? Например, «ни один из элементов не совпадает»