запрос mongodb встроенный ключ документа в качестве даты

2

Вот мой документ mongodb со встроенными документами. "События" - это список документов (BasicDBList), в которых каждый документ хранится с ключом как некоторая дата (например, 1 января 2013 года), а значение - это множество полей. Структура определена таким образом, чтобы я мог получить все события, произошедшие в какой-то день (например, 1 января 2013 г.).

У меня есть два вопроса:

  1. Есть ли лучший способ структурировать этот документ? Я не уверен, что ключ - это хорошая идея, но в то же время я хочу легко получить все документы и сохранить их в памяти на основе даты. Когда я получаю документы, я хочу, чтобы Hashtable с ключом считался датой и значением как Список документов для этой даты (с использованием Java).

  2. Как получить документы, отправив дату? Например, я хочу, чтобы все документы с ключом были как 1 января 2013 года. Каким будет запрос в Java?

 { "_id": { "_time": 1367928493, "_machine": -1914548796, "_inc": -1784811303, "_new": false }, "email": "[email protected]", "events": { "Jan 1, 2013": [ { "desc": "My Desc", "title": "My Title", "createDateTime": "May 7, 2013 8:08:13 AM", "updateDateTime": "May 7, 2013 8:08:13 AM" }, { "desc": "My Desc2", "title": "My Title2", "createDateTime": "May 7, 2013 8:08:13 AM", "updateDateTime": "May 7, 2013 8:08:13 AM" } ], "Feb 1, 2013": [ { "desc": "My Desc3", "title": "My Title3", "createDateTime": "May 8, 2013 8:08:13 AM", "updateDateTime": "May 7, 2013 8:08:13 AM" }, { "desc": "My Desc3", "title": "My Title3", "createDateTime": "May 8, 2013 8:08:13 AM", "updateDateTime": "May 8, 2013 8:08:13 AM" } ] } }

спасибо

  • 0
    Вы запрашиваете конкретную дату в конкретном документе или во всех документах?
  • 0
    У меня есть два требования: 1) Получить все документы на все даты 2) Получить все документы на определенную дату.
Теги:

1 ответ

1
Лучший ответ

Как правило, вам не разрешается запрашивать ключ json, но вы можете использовать этот трюк:

db.things.find( { key : { $exists : true } } );

этот запрос состоит в том, чтобы найти документ с определенным ключом

Однако я считаю, что это не лучший подход к решению вашего вопроса. Во-первых, объект событий документа кажется непредсказуемым в будущем, это то, чего мы должны избегать при разработке схемы, поскольку по мере роста документа mongodb должен переместить дисковое пространство для его хранения, что вызовет проблемы с производительностью.

Я рекомендую хранить объект событий в отдельной коллекции, поля "владелец" и "дата" - это то, что вы будете запрашивать.

{ 
  "owner":"[email protected]",
  "date":"Jan 1, 2013",
  "events":[  
    {  
       "desc": "My Desc",  
       "title": "My Title",  
       "createDateTime": "May 7, 2013 8:08:13 AM",  
       "updateDateTime": "May 7, 2013 8:08:13 AM"  
    }
  ]
}
  • 0
    Когда я использовал find $ exist: true, как упоминалось в вашем комментарии, я получал все события за все даты для структуры документа, которая у меня есть в моем вопросе. Но независимо от этого, мне очень нравится ваше предложение для схемы. Это упрощено и имеет смысл. Огромное спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню