问题描述
我有一个要使用服务器版本6.6.0,CouchbaseNetClient 3.0.5,Couchbase.Extensions.DependencyInjection 3.0.4.811进行更改的Couchbase文档。
文档:
{
"name": "First Last","email": null
}
更改代码:
var bucket = await _bucketProvider.GetBucketAsync();
await bucket.DefaultCollection().MutateInAsync(updatedProfile.Id,new[]
{
MutateInSpec.Upsert("name",updatedProfile.Name),MutateInSpec.Upsert("email",updatedProfile.Email)
});
KV错误:{Name =“ EINVAL”,Description =“无效的数据包”, Attributes =“ internal,invalid-input”}
这似乎是一个错误,很遗憾,我无法将问题提交到GitHub上的.NET客户端。
我在Couchbase can't MutateIn multiple upserts with null value 处找到了类似的帖子,但是即使我仅更新一个值,它也不会突变为null。
任何帮助将不胜感激。
注意::以下是一个示例片段,它再现了该问题。
class Program
{
private static ICluster _cluster;
static async Task Main(string[] args)
{
var userInfo = new
{
Name = "User1",Email = (string)null // *** This is causing the exception. ***
};
_cluster = await Cluster.ConnectAsync("couchbase://localhost","Administrator","Password");
var bucket = await _cluster.BucketAsync("items");
await bucket.DefaultCollection().MutateInAsync("doc1",new[]
{
MutateInSpec.Upsert("name",userInfo.Name),userInfo.Email) // *** Setting the null value ***
});
_cluster.dispose();
}
}
编辑:Couchbase Jira问题-https://issues.couchbase.com/browse/NCBC-2640
解决方法
更新:这似乎是一个错误-https://issues.couchbase.com/browse/NCBC-2640
我刚刚使用最新版本的.NET SDK(3.0.5,just released today)进行了尝试,并且可以正常运行,没有错误。我首先手动创建了示例文档。然后,我在控制台应用程序中运行了它:
class Program
{
private static ICluster _cluster;
static async Task Main(string[] args)
{
_cluster = await Cluster.ConnectAsync("couchbase://localhost","Administrator","password");
var bucket = await _cluster.BucketAsync("bucket");
var result = await bucket.DefaultCollection().MutateInAsync("doc1",new[]
{
MutateInSpec.Upsert("name","new name"),MutateInSpec.Upsert("email","new email") // this works fine,but `default(string)` instead of "new email" causes an exception
});
_cluster.Dispose();
}
}
在不知道您使用的是哪个版本的SDK的情况下,我推测这是一个已修复的错误。
另一种可能性:我注意到使用_bucketProvider
。 Couchbase.Extensions.DependencyInjection
库在默认情况下可能正在使用旧版本的SDK,因此请记住,您可以使用NuGet分别添加/更新这两个库。 (再次,只是推测您可能使用的版本)。
这已被Couchbase团队识别为错误。您可以在此处关注进度-https://issues.couchbase.com/browse/NCBC-2640