Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何反序列化一个';ObjectId';从BsonType';二进制';在蔚蓝宇宙空间数据库?_C#_Mongodb_Azure_Azure Functions_Azure Cosmosdb - Fatal编程技术网

C# 如何反序列化一个';ObjectId';从BsonType';二进制';在蔚蓝宇宙空间数据库?

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”反序列

在一周内,我在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”。

代码:

公共静态类函数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; }


}