C# 如何反序列化一个';ObjectId';从BsonType';二进制';在蔚蓝宇宙空间数据库?
在一周内,我在AZURE CosmosDb上遇到了很大的麻烦!这让我很失望。我的本地电脑一切正常。但如果我发布以下代码, 它返回我下面的错误 在Azure中登录Azure功能: 2019-07-25T12:28:00.854[信息]C#计时器触发功能于2019年7月25日下午12:28:00执行 2019-07-25T12:28:00.888[错误]执行“功能1”(失败,Id=9e5758d7-7ffa-430a-85ee-178aeaa6758a) 无法从BsonType“Binary”反序列化“ObjectId”。 代码:C# 如何反序列化一个';ObjectId';从BsonType';二进制';在蔚蓝宇宙空间数据库?,c#,mongodb,azure,azure-functions,azure-cosmosdb,C#,Mongodb,Azure,Azure Functions,Azure Cosmosdb,在一周内,我在AZURE CosmosDb上遇到了很大的麻烦!这让我很失望。我的本地电脑一切正常。但如果我发布以下代码, 它返回我下面的错误 在Azure中登录Azure功能: 2019-07-25T12:28:00.854[信息]C#计时器触发功能于2019年7月25日下午12:28:00执行 2019-07-25T12:28:00.888[错误]执行“功能1”(失败,Id=9e5758d7-7ffa-430a-85ee-178aeaa6758a) 无法从BsonType“Binary”反序列
公共静态类函数1
{
[功能名称(“功能1”)]
[过时]
公共静态无效运行([TimerTrigger(****)]TimerInfo myTimer,ILogger日志)
{
log.LogInformation($“C#计时器触发器函数在:{DateTime.Now}执行”);
变量connectionString=@“mongodb://gggdfdfgfsdfdsfsd";
//变量connectionString=@“mongodb://localhost:27017/admin";
MongoClient=新的MongoClient(connectionString);
var-database=client.GetDatabase(“xxxxx-playdy”);
//var database=client.GetDatabase(“abc”);
var collection=database.GetCollection(“测试”);
var beforeDate=DateTime.UtcNow.AddDays(-7);
var totalDeleted=0;
var id=新列表();
做
{
ids=collection.Find(k=>
k、 CreatedDate<在日期之前&&
k、 xxx==null&&
k、 yyy==null&&
(k.Items.Length==0 | | k.Items==null)
)
.限额(100)
.Project(k=>k.\u id)
.ToList();
if(ids.Any())
{
DeleteMany(k=>ids.Contains(k.\u id));
totalDeleted+=ids.Count();
}
}while(id.Any());
log.LogInformation($“已删除{totalDeleted}在{beforeDate.ToSortDateString()}之前创建的文档”);
}
}
公开课考试
{
公共对象id{get;set;}
公共对象xxx{get;set;}
公共对象yyy{get;set;}
公共日期时间CreatedDate{get;set;}
公共对象[]项{get;set;}
}
您可以尝试使用MongoDB.Bson.ObjectId.GenerateNewId().ToString()
;对于id=''@HariHaran,我不明白为什么?我正在获取收集和使用删除过程。为什么或如何生成GeneratenWid?@Penguen在azure上运行以下查询,查看是否返回任何结果db.test.find({u id:{$type:“binData”}})
如果它确实返回了一些东西,那么错误消息是有意义的。一个或多个文档的_id字段存储为二进制。改变这一点可以/应该解决你的问题。只是一个想法。我从未使用过azure函数。您能尝试使用MongoDB.Bson.ObjectId.GenerateNewId().ToString()
;对于id=''@HariHaran,我不明白为什么?我正在获取收集和使用删除过程。为什么或如何生成GeneratenWid?@Penguen在azure上运行以下查询,查看是否返回任何结果db.test.find({u id:{$type:“binData”}})
如果它确实返回了一些东西,那么错误消息是有意义的。一个或多个文档的_id字段存储为二进制。改变这一点可以/应该解决你的问题。只是一个想法。我从未使用过azure函数。
public static class Function1
{
[FunctionName("Function1")]
[Obsolete]
public static void Run([TimerTrigger("* * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
var connectionString = @"mongodb://gggdfdfgfsdfdsfsd";
//var connectionString = @"mongodb://localhost:27017/admin";
MongoClient client = new MongoClient(connectionString);
var database = client.GetDatabase("xxxxx-playground");
//var database = client.GetDatabase("abc");
var collection = database.GetCollection<Test>("test");
var beforeDate = DateTime.UtcNow.AddDays(-7);
var totalDeleted = 0;
var ids = new List<ObjectId>();
do
{
ids = collection.Find(k =>
k.CreatedDate < beforeDate &&
k.xxx == null &&
k.yyy == null &&
(k.Items.Length == 0 || k.Items == null)
)
.Limit(100)
.Project(k => k._id)
.ToList();
if (ids.Any())
{
collection.DeleteMany(k => ids.Contains(k._id));
totalDeleted += ids.Count();
}
} while (ids.Any());
log.LogInformation($"Deleted {totalDeleted} documents created before {beforeDate.ToShortDateString()}");
}
}
public class Test
{
public ObjectId _id { get; set; }
public object xxx { get; set; }
public object yyy { get; set; }
public DateTime CreatedDate { get; set; }
public object[] Items { get; set; }
}