Невозможно конвертировать BsonDocument - PullRequest
1 голос
/ 27 июня 2019

Я создаю игру и использую MongoDB для хранения координат игроков.Я использовал более старую версию MongoDB, и мой код работал нормально, но мне пришлось разместить базу данных в MongoDB Cloud, и я был вынужден изменить версию .NET на 4.X.Я скачал новые драйверы, и у меня возникли некоторые проблемы с исправлением моего кода, потому что версия, которую я использовал, была слишком старой, и все изменилось.

Это мой код:

public class Coordinate {
    public float x  { get; set; }
    public float y  { get; set; }
    public float z  { get; set; }
}

public class Scores  {
    [MongoDB.Bson.Serialization.Attributes.BsonElement]
    public ObjectId _id { get; set; }
    public Coordinate[] Coordinates { get; set; }
    public string Player { get; set; }
    public float Time { get; set; }
    public string Level { get; set; }
}

public static BsonArray arr = new  BsonArray();
public static BsonArray arr2 = new BsonArray();

public static IMongoCollection<Scores>  highestScoreCollection = 
db.GetCollection<Scores>("scores");

Я не могу вставить новый документ, я использовал InsertBatch и изменил на insertMany.

            arr.Add(new BsonDocument{
                {"Coordinates", arr2},
                {"Player", "Neuer"},
                {"Time", time},
                {"Level", scene.name}
            });


            highestScoreCollection.InsertMany(arr);

Я получил эту ошибку:

Аргумент 1: невозможно преобразовать из 'MongoDB.Bson.BsonDocument 'в' System.Collections.Generic.IEnumerable '

И я не могу перебрать свою коллекцию:

foreach (var document in highestScoreCollection.Find(new QueryDocument("Level", scene.name)).SetSortOrder(SortBy.Descending("Time"))){

}

Я получаю следующие ошибки:

Аргумент 1: невозможно преобразовать из «MongoDB.Bson.BsonArray» в «System.Collections.Generic.IEnumerable»

ошибка CS0103: имя «SortBy» не существует в текущемcontext

Как я могу исправить свой код?

1 Ответ

0 голосов
/ 27 июня 2019

как выглядит следующий код?если это выглядит привлекательно, взгляните на оболочку драйвера mongodb MongoDB.Entities .это значительно упрощает доступ к mongodb.абсолютно не нужно использовать Bsondocument, если только вам это не нужно.

using MongoDB.Entities;
using System;
using System.Linq;

namespace StackOverflow
{
    public class Program
    {
        [Name("Scores")]
        public class Score : Entity
        {
            public Coordinate[] Coordinates { get; set; }
            public string Player { get; set; }
            public float Time { get; set; }
            public string Level { get; set; }
        }

        public class Coordinate
        {
            public float x { get; set; }
            public float y { get; set; }
            public float z { get; set; }
        }

        private static void Main(string[] args)
        {
            new DB("test");

            var coords = new[] {
                new Coordinate{ x=1.111f, y=2.222f, z=3.333f},
                new Coordinate{ x=1.111f, y=2.222f, z=3.333f},
                new Coordinate{ x=1.111f, y=2.222f, z=3.333f}
            };

            (new[] {
                new Score
                {
                    Coordinates = coords,
                    Player = "player 1",
                    Time = 0.11f,
                    Level = "scene a"
            },  new Score
                {
                    Coordinates = coords,
                    Player = "player 2",
                    Time = 0.22f,
                    Level = "scene a"
                }
            }).Save();

            var scores = DB.Queryable<Score>()
                           .Where(s => s.Level == "scene a")
                           .OrderByDescending(s => s.Time)
                           .ToArray();

            foreach (var score in scores)
            {
                Console.WriteLine($"player: {score.Player}");
            }

            Console.ReadKey();
        }
    }
}

[заявление об отказе: я автор библиотеки]

...