Вы правы в определенном утверждении документа BSON, это не XML-документ. Поскольку XML загружается в древовидную структуру, состоящую из «узлов», поиск на арбитальном ключе довольно прост.
Документ MonoDB не так прост в обработке, и это «база данных» во многих так что обычно ожидается, что он будет иметь определенную «однородность» местоположений данных, чтобы упростить «индексирование» и поиск.
Тем не менее это можно сделать. Но, конечно, это означает, что на сервере выполняется рекурсивный процесс, и это означает, что обработка JavaScript с помощью $where
.
В качестве примера базовой оболочки, но общий function
просто строковый аргумент для оператора $where
всюду:
db.collection.find(
function () {
var findKey = "find-this",
findVal = "please find me";
function inspectObj(doc) {
return Object.keys(doc).some(function(key) {
if ( typeof(doc[key]) == "object" ) {
return inspectObj(doc[key]);
} else {
return ( key == findKey && doc[key] == findVal );
}
});
}
return inspectObj(this);
}
)
Итак, в основном, проверьте ключи, присутствующие в объекте, чтобы увидеть, соответствуют ли они желаемому «имени поля» и содержимому. Если какой-либо из этих ключей является «объектом», то запишите его в функцию и проверьте снова.
JavaScript .some()
гарантирует, что найденное совпадение будет найдено из функции поиска, дающей результат true
и возвращающий объект, где этот «ключ / значение» присутствовал на некоторой глубине.
Обратите внимание, что $where
по существу означает перемещение всей вашей коллекции, если только не существует какой-либо другой действительный фильтр запросов, который может быть применен к «индексу» в коллекции.
Так что используйте с осторожностью или вообще не работайте и просто работайте с реструктуризацией данных в более работоспособную форму.
Но это даст вам ваш матч.
Файл-> Управление исходным кодом-> Усовершенствованный-> Управление исходным кодом Изменения и затем развязывает и/или разъединяет все проекты и решение.
Это должно удалить всю привязку из решения и файлов проекта. (После того, как это можно переключить поставщика SCC в Инструменты-> Опции-> Управление исходным кодом-> Сменный Выбор).
спецификация SCC предписывает, чтобы все поставщики SCC реализовали это поведение. (Я только протестировал его на VSS, TFS и AnkhSVN)
Простое решение состояло бы в том, чтобы открыть Visual Studio, деактивировать Плагин TFS в Инструменты> Опции> Управление исходным кодом и вновь открыть решение, которое Вы хотите убрать. Visual Studio попросит удалять привязку управления исходным кодом