Дана коллекция элементов {url: 'http: // blah'}. Как узнать, существует ли запись с URL-адресом «http://stackoverflow.com»?
P.s. Я общаюсь с драйвером c #
Дана коллекция элементов {url: 'http: // blah'}. Как узнать, существует ли запись с URL-адресом «http://stackoverflow.com»?
P.s. Я общаюсь с драйвером c #
Чтобы любое из предыдущих предложений было эффективным, вы должны быть уверены, что на элементе 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
}
вам просто нужно проверить количество элементов, возвращаемых запросом:
int count = collection.FindAs<Item>(Query.EQ("url", "http://stackoverflow.com")).Count();
if(count > 0)
{
//do some stuff
}
Существование ключа в MongoDB можно проверить, используя Exists и второй параметр как true или false
var filter = builder.Exists("style", false);
var RetrievedData = collection.Find(filter).ToList()