Вы можете использовать следующие методы, чтобы проверить, существует ли поле в коллекции в 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: проверить, существует ли поле
В следующем коде показано, как проверить, существует ли имя поля «точки» в коллекции команд :
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 }
Поскольку имя поля «точки» существует, возвращается каждый документ, содержащий поле «точки».
Предположим, вместо этого мы проверяем, существует ли поле с именем «steals» в наборе команд :
db.teams.find({ " steals ": { $exists : true } })
Поскольку это поле не существует, выходные данные не возвращаются.
Пример 2. Проверка наличия встроенного поля
В следующем коде показано, как проверить, существует ли встроенное имя поля «div» в поле «класс» в коллекции Teams :
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».
Предположим, вместо этого мы проверяем, существует ли встроенное имя поля «подразделение» в поле «класс» в коллекции команд :
db.teams.find({ " class.division ": { $exists : true } })
Поскольку это встроенное поле не существует, выходные данные не возвращаются.
Примечание.Полную документацию по функции $exists можно найти здесь .
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в MongoDB:
MongoDB: как вывести список всех имен полей
MongoDB: как переименовать поля
MongoDB: как добавить новые поля
MongoDB: как удалить поля