Что я сделал:
Класс выглядит следующим образом:
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};
Вот что вернулось:
И посмотрите на этот код и данные:
var query =
from e in collection.AsQueryable<userObject>()
select e;
List<userObject> doc = await query.ToListAsync();
Я просто не могупонять, почему это происходит.Или, что более важно: как решить эту проблему?
РЕДАКТИРОВАНИЕ:
Попытка заменить поле 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;
}
Результатом было то, что идентификатор был нулевым !!!(??!)