【问题标题】:Filter where a match exists in Array过滤 Array 中存在匹配的位置
【发布时间】:2016-10-12 14:07:48
【问题描述】:

当我修改过滤器以仅选择 artist_ID 包含 artistIds 数组中的匹配项的 ArtistDocument 时,我收到以下错误。

“不支持表达式树:{document}{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);

【问题讨论】:

    标签: c# mongodb mongodb-query


    【解决方案1】:

    我相信你可以用 ElemMatch 实现你想要的

    Builders<ArtistsDocument>.Filter.ElemMatch
    

    类似这样的:

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

    【讨论】:

    • 这个有逆反吗?例如“没有一个元素匹配”
    猜你喜欢
    • 2021-01-29
    • 2019-04-10
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2021-10-02
    • 2013-06-22
    相关资源
    最近更新 更多