Mongodb: как проверить, существует ли поле
Вы можете использовать следующие методы, чтобы проверить, существует ли поле в коллекции в MongoDB:
Способ 1: проверьте, существует ли поле
db.myCollection.find({ " myField ": { $exists : true } })
Этот метод проверяет, существует ли «myField» в коллекции с именем myCollection . Если да, он возвращает все документы, содержащие имя поля. Если это не так, он ничего не возвращает.
Способ 2: проверьте, существует ли внедренное поле
db.myCollection.find({ " myField.embeddedField ": { $exists : true } })
Этот метод проверяет, существует ли имя поля «embeddedField» в поле «myField» в коллекции с именем myCollection . Если да, он возвращает все документы, содержащие имя поля. Если это не так, он ничего не возвращает.
Следующие примеры показывают, как использовать каждый метод на практике с командой по сбору платежей со следующими документами:
db.teams.insertOne({team: "Mavs", class: {conf: "Western", div: "A"}, points: 31 }) db.teams.insertOne({team: "Spurs", class: {conf: "Western", div: "A"}, points: 22 }) db.teams.insertOne({team: "Jazz", class: {conf: "Western", div: "B"}, points: 19 }) db.teams.insertOne({team: "Celtics", class: {conf: "Eastern", div: "C"}, points: 26 })
Пример 1. Проверьте, существует ли поле
Следующий код показывает, как проверить, существует ли имя поля «points» в коллекции команд :
db.teams.find({ " points ": { $exists : true } })
Этот запрос возвращает следующие документы:
{ _id: ObjectId("6203d10c1e95a9885e1e7637"), team: 'Mavs', class: { conf: 'Western', div: 'A' }, points: 31 } { _id: ObjectId("6203d10c1e95a9885e1e7638"), team: 'Spurs', class: { conf: 'Western', div: 'A' }, points: 22 } { _id: ObjectId("6203d10c1e95a9885e1e7639"), team: 'Jazz', class: { conf: 'Western', div: 'B' }, points: 19 } { _id: ObjectId("6203d10c1e95a9885e1e763a"), team: 'Celtics', class: { conf: 'Eastern', div: 'C' }, points: 26 }
Поскольку имя поля «points» существует, возвращается каждый документ, содержащий поле «points».
Предположим, вместо этого мы проверяем, существует ли имя поля «steals» в коллекции команд :
db.teams.find({ " steals ": { $exists : true } })
Поскольку это поле не существует, выходные данные не возвращаются.
Пример 2. Проверьте, существует ли внедренное поле
Следующий код показывает, как проверить, существует ли встроенное имя поля «div» в поле «class» коллекции команд :
db.teams.find({ " class.div ": { $exists : true } })
Этот запрос возвращает следующие документы:
{ _id: ObjectId("6203d10c1e95a9885e1e7637"), team: 'Mavs', class: { conf: 'Western', div: 'A' }, points: 31 } { _id: ObjectId("6203d10c1e95a9885e1e7638"), team: 'Spurs', class: { conf: 'Western', div: 'A' }, points: 22 } { _id: ObjectId("6203d10c1e95a9885e1e7639"), team: 'Jazz', class: { conf: 'Western', div: 'B' }, points: 19 } { _id: ObjectId("6203d10c1e95a9885e1e763a"), team: 'Celtics', class: { conf: 'Eastern', div: 'C' }, points: 26 }
Поскольку имя встроенного поля «div» существует в поле «class», возвращается каждый документ, содержащий встроенное поле «div».
Предположим, мы вместо этого проверяем, существует ли встроенное имя поля «division» в поле «class» в коллекции Teams :
db.teams.find({ " class.division ": { $exists : true } })
Поскольку это встроенное поле не существует, выходные данные не возвращаются.
Примечание . Полную документацию по функции $exists можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:
MongoDB: как составить список всех имен полей
MongoDB: как переименовать поля
MongoDB: как добавить новые поля
MongoDB: как удалить поля