2016-10-12 8 views
1

ArtistDocumentartist_IDに一致する文字がartistIdsの配列のみを含むようにフィルタを変更したところ、次のエラーが発生しました。配列が一致するフィルタ

"という表現ツリーがサポートされていません:{文書} {} artist_ID" のSystem.Exception {} 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 & Builders<ArtistsDocument>.Filter.Eq("genre", "Rock"); 
filter = filter & 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 && x.x.ArrayField2 == field2); 
+2

逆はありますか?例えば、 "要素のどれも一致しない" – Sinaesthetic

関連する問題