MongoDB $ gte не соответствует полю вложенного документа - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь запросить простой JSON, чтобы вернуть все совпадения, где values.time больше 10:

{ key: "key1",
  values: [
    "{\"object\":\"some object1\",\"time\":11}",
    "{\"object\":\"some object2\",\"time\":9}",
  ]
}

Запрос выполняется через Java API:

FindIterable<Document> documents = collection.find(gte("values.time", 10));

Пожалуйста, просмотрите обновление и найдите команды, о которых сообщает mon go:

10:13:10.126 [main] DEBUG org.mongodb.driver.protocol.command - Sending command '{"update": "collection1", "ordered": true, "$db": "db1", "updates": [{"q": {"key": "key1"}, "u": {"$push": {"values": "{\"object\":\"some object\",\"time\":11}"}}}]}' with request id 31 to database db1 on connection [connectionId{localValue:2, serverValue:35}] to server localhost:27017
10:13:10.128 [main] DEBUG org.mongodb.driver.protocol.command - Execution of command with request id 31 completed successfully in 2.02 ms on connection [connectionId{localValue:2, serverValue:35}] to server localhost:27017
10:13:10.130 [main] DEBUG org.mongodb.driver.protocol.command - Sending command '{"find": "collection1", "filter": {"values.time": {"$gte": 10}}, "$db": "db1"}' with request id 32 to database db1 on connection [connectionId{localValue:2, serverValue:35}] to server localhost:27017

Пока совпадение не найдено. Что я делаю неправильно? Ответы с использованием Java API являются предпочтительными.

1 Ответ

0 голосов
/ 31 марта 2020

Документ, который вы показываете:

{ key: "key1",
  values: [
    "{\"object\":\"some object1\",\"time\":11}",
    "{\"object\":\"some object2\",\"time\":9}",
  ]
}

Содержит 2 поля - key содержит строку, а values содержит массив строк.

Вы можете проверить это, запустив это объединение:

db.collection1.aggregate([
        {$match: {key: "key1"}},
        {$project: { 
              valueType:{
                     $map:{
                       input:"$values",
                       in:{$type:"$$this"}
                     }
               },
               _id:0
        }}
])

Элемент, который вы нажимаете, также является строкой, а не объектом.

Если вы замените обе эти строки на реальные объекты, он должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...