Как определить, существует ли запись в коллекции Mongo (C #) - PullRequest
3 голосов
/ 08 ноября 2011

Учитывая коллекцию предметов {url: 'http://blah'}. Как я могу определить, существует ли запись с URL-адресом "http://stackoverflow.com"?

P.s. Я общаюсь с драйвером c #

Ответы [ 4 ]

7 голосов
/ 09 ноября 2011

Чтобы любое из предыдущих предложений было эффективным, вы должны быть уверены, что в элементе url есть индекс.В противном случае потребуется полное сканирование коллекции.

Если вы ожидаете, что ответ будет 0 или 1, подсчет, вероятно, является наиболее эффективным подходом.Если вы считаете, что число будет очень большим, и все, что вас действительно волнует, так это наличие одного или нескольких, FindOne - наиболее эффективный подход.

Вероятно, не имеет значения, что FindOne возвращает весь документ, если толькодокумент на самом деле довольно большой.В этом случае вы можете указать серверу вернуть только одно поле (наиболее вероятным кандидатом является _id):

var query = Query.EQ("url", "http://stackoverflow.com");
var fields = Fields.Include("_id");
var res = collection.Find(query).SetFields(fields).SetLimit(1).FirstOrDefault();
if (res == null) {
    // no match found
}
2 голосов
/ 08 ноября 2011

вам просто нужно проверить количество элементов, возвращаемых запросом:

int count = collection.FindAs<Item>(Query.EQ("url", "http://stackoverflow.com")).Count();
if(count > 0)
{
  //do some stuff
}
1 голос
/ 08 ноября 2011
IMongoQuery query = Query.EQ("url", "http://stackoverflow.com");
var res = collection.FindOne(query);
if(res == null)//don't exist
{

}
0 голосов
/ 03 августа 2016

Наличие ключа в MongoDB можно проверить с помощью Exists и второго параметра как true или false

var filter = builder.Exists("style", false);
var RetrievedData = collection.Find(filter).ToList()

Ссылка на ссылку

...