Класс var установлен как id, сохранен в документе как _id, и linq не может его обработать - PullRequest
0 голосов
/ 03 февраля 2019

Что я сделал:

Класс выглядит следующим образом:

public class userObject 
{
    public string id { get; set; }
    public string name { get; set; }
    public string phone_number { get; set; }
    public string email { get; set; } 
}

Вставлен документ через MongoDB.Driver.

 var client = new MongoClient(MlabConnection);
 var database = client.GetDatabase(MlabDatabase);
 var collection = database.GetCollection<userObject>("users");
 await collection.InsertOneAsync(user);

В обозревателе данных Azure Cosmos,Документ сохранен следующим образом:

{
    "_id" : "FFjl1683184526",
    "name" : "nati",
    "phone_number" : "+976797",
    "email" : "na.com",
}

Поэтому, когда я запрашиваю, я должен фильтровать с "_id" вместо "id".Я всегда делал запрос, используя фильтр драйвера mongodb:

var filter = Builders<userObject>.Filter.In("_id", id);

Но сегодня я выучил Linq (WOW LOL), и когда я начал использовать WHERE и отфильтровал id по списку строк, например:

     public static async Task<List<userObject>> GetUsersById_mini(List<string> ids)
     {
            try
            {
                var client = new MongoClient(MlabConnection);
                var database = client.GetDatabase(MlabDatabase);
                var collection = database.GetCollection<userObject>("users");

                var query =
                    from e in collection.AsQueryable<userObject>()
                    where ids.Contains(e.id)
                    select e;

                List<userObject> doc = await query.ToListAsync();

он всегда находил 0 документов (и да, там был документ, который нужно найти).

Я провел еще один тест:

 var client = new MongoClient(MlabConnection);
 var database = client.GetDatabase(MlabDatabase);
 var collection = database.GetCollection<userObject>("users");

 var query = from e in collection.AsQueryable<userObject>()
 select new miniuserObject { name = e.name, id = e.id};

Вот что вернулось: vs screenshot

И посмотрите на этот код и данные:

var query =
   from e in collection.AsQueryable<userObject>()
   select e;
List<userObject> doc = await query.ToListAsync();

see here

Я просто не могупонять, почему это происходит.Или, что более важно: как решить эту проблему?

РЕДАКТИРОВАНИЕ:

Попытка заменить поле id класса на _id:

public class userObject2
{
    public string _id { get; set; }
    public string name { get; set; }
    public string phone_number { get; set; }
    public string email { get; set; }
}



public static async Task<List<miniuserObject>> GetUsersById_mini(List<string> ids)
    {
        try
        {
            var client = new MongoClient(MlabConnection);
            var database = client.GetDatabase(MlabDatabase);
            var collection = database.GetCollection<userObject2>("users");

            var query =
                from e in collection.AsQueryable<userObject2>()
                select new miniUserObject { id = e._id, name = e.name };

            List<miniUserObject> doc = await query.ToListAsync();

            List<miniuserObject> adddd = new List<miniuserObject>();
            return adddd;
        }

Результатом было то, что идентификатор был нулевым !!!(??!)

enter image description here

...