Как найти подходящую запись в mongodb? - PullRequest
5 голосов
/ 26 сентября 2011

У меня есть запись в моей коллекции, и я хочу получить данные о человеке с идентификатором 1. Но я получаю данные 2 раза вместо 1.

    db.mycollection.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}, { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]})

Затем запускаю

    > db.mycollection.findOne({"person.id":1},{"person.details":1,"_id":0})

результат:

    {
        "person" : 
                [
                    {
                        "details" : 
                        {
                         "name" : "Aswini",
                         "Age" : 10
                        }
                    },
                    {
                        "details" : 
                        {
                         "name" : "Mahesh",
                         "Age" : 11
                        }
                    }
                ]
    }

Но мне нужно следующее:

    {
    "person" : [
                {
                "details" : {
                            "name" : "Aswini",
                            "Age" : 10
                        }
                }
            ]
    }

Не понимаю, где совершаю ошибку.Пожалуйста, нужна ваша помощь.Использую MongoDB, Java

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

Это поведение фильтрации многоуровневого внедренного документа, обычно соответствующий фильтр возвращает весь документ, а не подмножества.

Обычно positional operator $ используется для сопоставления вложенных документов в updates. Но функция еще не реализована в возвращаемых спецификаторах.

В монго уже существует нерешенная проблема Поддержка позиционного оператора ($) в полях для возврата спецификатора . (Пожалуйста, войдите, чтобы проголосовать, если вам действительно нужна функция)

Таким образом, вы должны пересмотреть свою схему, чтобы справиться с этим, может быть так

db.test.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}]})
db.test.insert({"person" : [ { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]})

db.test.find({"person.id":1},{'person.details':1})
0 голосов
/ 26 сентября 2011

person - это массив. Если вы хотите получить первый элемент этого массива, вы должны использовать $ slice

db.mycollection.findOne({"person.id":1},{"person":{$slice:[0,1]},"_id":0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...