Mongo как исключить вложенный _id во вложенном массиве

#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 }
)
  

Игровая площадка,
Оболочка Mongo

Комментарии:

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 может присутствовать, в других нет