// vanillaJS
function isJSON(str) {
try {
return (JSON.parse(str) && !!str);
} catch (e) {
return false;
}
}
Использование: isJSON({})
будет false
, isJSON('{}')
будет true
.
Чтобы проверить, что что-то есть Array
или Object
( проанализировано JSON):
// vanillaJS
function isAO(val) {
return val instanceof Array || val instanceof Object ? true : false;
}
// ES2015
var isAO = (val) => val instanceof Array || val instanceof Object ? true : false;
Использование: isAO({})
будет true
, isAO('{}')
будет false
.
Я никогда не понимал, почему документация Mongoose так широко рекомендует отключать autoIndex
в производстве. После добавления индекса последующие вызовы ensureIndex
будут просто видеть, что индекс уже существует и затем возвращается. Таким образом, это влияет только на производительность при первом создании индекса, и в то время коллекции часто пустые, поэтому создание индекса в любом случае будет быстрым.
Мое предложение оставить autoIndex
если у вас нет конкретной ситуации, когда это создает проблемы; например, если вы хотите добавить новый индекс в существующую коллекцию, в которой есть миллионы документов, и вам нужно больше контролировать, когда она создана.
Хотя я согласен с принятым ответом, стоит отметить, что в соответствии с руководством MongoDB это не рекомендуемый способ добавления индексов на рабочий сервер:
Если ваше приложение включает операции обеспеченияIndex (), а индекс не существует для других операционных проблем, построение индекса может оказать серьезное влияние на производительность базы данных.
Чтобы избежать проблем с производительностью , убедитесь, что ваше приложение проверяет индексы при запуске с использованием метода getIndexes () или эквивалентного метода для вашего драйвера и завершает работу, если соответствующие индексы не существуют. Всегда создавайте индексы в производственных экземплярах с использованием отдельного кода приложения во время определенных окон обслуживания.
blockquote>Конечно, это действительно зависит от того, как ваше приложение структурировано и развернуто. Например, если вы развертываете в Heroku, и вы не используете функцию предварительной загрузки Heroku , скорее всего, ваше приложение не будет вообще выполнять запросы во время запуска, и поэтому, вероятно, безопасно создать индекс в это время.
В дополнение к этому из принятого ответа:
Таким образом, это только влияет на производительность при первом создании индекса и в то время коллекции часто пустые, поэтому создание индекса в любом случае будет быстрым.
blockquote>Если вам удалось впервые получить модель данных и запросы, прибитые в первый раз, это нормально, и часто случай. Однако, если вы добавляете новые функции в свое приложение, с новым запросом БД на свойство без индекса, вы часто обнаруживаете, что добавляете индекс в коллекцию, содержащую многие существующие документы.
Это время, когда вам нужно быть осторожным с добавлением индексов и тщательно учитывать последствия этой работы. Например, вы могли бы создать индекс в фоновом режиме :
db.ensureIndex({ name: 1 }, { background: true });
autoIndex
является ложным, вам нужно вызвать makeIndexes на вашей модели, чтобы создать свои индексы. – JohnnyHK 23 June 2013 в 16:10