如何在MongoDB UpdateOne上实现string-less-than过滤器



我试图更新MongoDB中的文档,但仅当更新项上的ETag比现有项更新。目前,我的请求看起来像这样:

UpdateResult _ = await collection.UpdateOneAsync(
p => p.Guid.Equals(new Guid(id)) && string.Compare(p.ETag, etag) < 0,
updater, new UpdateOptions(), token).ConfigureAwait(false);

然而,当我尝试这样做时,我得到一个System.InvalidOperationException的消息为&;Compare({document}{etag}, &;637678355616597757&;)不支持&;。我认为这意味着string.Compare函数在此上下文中无效,因此我将其替换为p.ETag.Equals(etag, StringComparison.Ordinal),但这也不起作用。

更新我将过滤器上的条件顺序切换为string.Compare(p.ETag, etag) < 0 && p.Guid.Equals(new Guid(id)),但相同的错误仍然存在。这告诉我,这不是过滤器只接受单个条件的问题,而是字符串比较的问题,特别是

考虑到这一点,我如何确保包含 的条目

我无法使用表达式实现过滤器,但这个解决方案修复了我遇到的问题:

FilterDefinition<TItem> filter = new FilterDefinitionBuilder<TItem>().And(
new FilterDefinitionBuilder<TItem>().Eq(p => p.Guid, new Guid(id)),
new FilterDefinitionBuilder<TItem>().Lt(p => p.ETag, etag));
UpdateResult _ = await collection.UpdateOneAsync(filter, updater, 
new UpdateOptions(), token).ConfigureAwait(false);

相关内容

  • 没有找到相关文章

最新更新