#mongodb #mongodb-query
#mongodb #mongodb-запрос
Вопрос:
Я хочу исключить вложенное значение по умолчанию _id
в каждом элементе массива в полученном результате. У меня следующий запрос. В некоторых полях _id
свойство может отсутствовать. Как я могу исключить его в фильтрах? Возможно ли это?
db.getCollection('Test').find({"name":"t1"},{"_id":0})
Я получаю следующие данные из базы данных
{
"array" : [
{
"_id": ObjectId("5685ea32ba5298688d27cceb"),
"id" : 1,
"name" : "aaa"
},
{
"_id": ObjectId("5685ea32ba5298688d27cceb"),
"id" : 2,
"name" : "bbb"
},
{
"id" : 3,
"name" : "bbb"
},
]
}
Я хочу получить следующий массив без _id
{
"array" : [
{
"id" : 1,
"name" : "aaa"
},
{
"id" : 2,
"name" : "bbb"
},
]
}
Когда я пытаюсь использовать
db.getCollection('Test').find({"name":"t1"},{"_id":0, "array._id":0})
Я получаю ошибку типа:
«errmsg»: «Проекция не может сочетать включение и исключение.», Я думаю, причина в том, что некоторые объекты массива не содержат
_id
свойства
Ответ №1:
_id
Находится внутри поля массива, поэтому вам нужно использовать array._id
,
db.getCollection('Test').find(
{ "name": "t1" },
{ "array._id": 0 }
)
Комментарии:
1. К сожалению, я получил ошибку типа: Проекция не может сочетать включение и исключение. Также я ожидаю, что _id будет исключен для всех элементов в массиве
2. итак, вы пробовали тот же запрос, что и в ответе? да, этот ответ предназначен для исключения _id из массива
3. да, я попробовал выполнить реальный запрос, и это не помогло, но я включу вместо этого исключение. Mb Это неправильный способ, но db.getCollection(‘Test’).find({«name»:»t1″},{«_id»:0, «array.name «: 1,»array.id «:1 }) это работает
4. я не совсем понимаю, как вы это используете, но посмотрите на этот запрос mongoplayground.net/p/krjq0xhZ6JV , это возвращает ожидаемый результат, если вы хотите что-то другое, пожалуйста, обновите свой вопрос.
5. Да, вы правы. Как я понял в одних записях вложенных массивов _id может присутствовать, в других нет