Вот мой документ mongodb со встроенными документами. "События" - это список документов (BasicDBList), в которых каждый документ хранится с ключом как некоторая дата (например, 1 января 2013 года), а значение - это множество полей. Структура определена таким образом, чтобы я мог получить все события, произошедшие в какой-то день (например, 1 января 2013 г.).
У меня есть два вопроса:
Есть ли лучший способ структурировать этот документ? Я не уверен, что ключ - это хорошая идея, но в то же время я хочу легко получить все документы и сохранить их в памяти на основе даты. Когда я получаю документы, я хочу, чтобы Hashtable с ключом считался датой и значением как Список документов для этой даты (с использованием Java).
Как получить документы, отправив дату? Например, я хочу, чтобы все документы с ключом были как 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" } ] } }
спасибо
Как правило, вам не разрешается запрашивать ключ 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"
}
]
}