MongoDb: простой запрос не работает - PullRequest
0 голосов
/ 26 сентября 2018

Я не совсем понимаю, почему я получаю разные результаты, когда:

> db.reference.find({"metadata.values": {address: {location: "barcelona"} } }).count();
0
> db.reference.find({"metadata.values.address.location": "barcelona"}).count();
1

В чем разница?

Документ, содержащийся в коллекции reference:1007 *

{
        "_id" : "Doc1Ref2",
        "document" : "doc1",
        "metadata" : [
                {
                        "_id" : "Doc1Ref2Mdt1",
                        "user" : "user2",
                        "creationTimestamp" : ISODate("2018-09-24T12:20:56.169Z"),
                        "values" : {
                                "date" : ISODate("2018-09-24T12:20:56.171Z"),
                                "number" : 16,
                                "address" : {
                                        "street" : "Av. Diagonal",
                                        "location" : "barcelona"
                                },
                                "credentials" : [
                                        {
                                                "password" : "pwd",
                                                "login" : "main"
                                        },
                                        {
                                                "password" : "pwd",
                                                "login" : "other",
                                                "creation" : ISODate("2018-09-24T12:20:56.171Z")
                                        }
                                ],
                                "contact" : "contact name",
                                "tags" : [
                                        "tag1",
                                        "tag2"
                                ]
                        }
                }
        ],
        "timestampCreation" : ISODate("2018-09-24T12:20:56.169Z")
}

1 Ответ

0 голосов
/ 26 сентября 2018

Первый запрос соответствует документам, где metadata.values является точным объектом {address: {location: "barcelona"} }, а второй - где metadata.values имеет объект с address.location, равным "barcelona".

Эквивалентные тесты вJavaScript:

if ((document.metadata || {}).values == {address: {location: "barcelona"} }) 

и

if ((((document.metadata || {}).values || {}).address || {}).location == "barcelona") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...