Спасибо за предоставление данных и более четкое объяснение. Есть несколько способов сделать это. Вот один из них.
select *
from FormFields
where FormId
not in
(
select FormId
from FormFields
where Label in ('First Name', 'Last Name')
)
Я думаю, что вы на правильном пути. Я бы использовал ограниченную коллекцию для строк чата, где каждая строка содержит идентификатор пользователя, идентификатор комнаты, метку времени и то, что было сказано. Срок действия этих данных истечет, как только будет достигнут «конец» закрытой коллекции, поэтому, если вам нужен исторический журнал, вам нужно периодически копировать данные из закрытой коллекции в коллекцию «журналов», но закрытые коллекции специально предназначены для ведения журнала. приложения стиля, где вы не собираетесь удалять документы, и порядок вставки имеет значение. В случае чата это идеальное совпадение.
Единственное другое изменение, которое я бы предложил, это сохранить загрузки в отдельной коллекции.
Я также большой поклонник mongodb как базы данных документов. Но вы уверены, что используете mongodb по правильной причине? В чем сила mongodb?
Это субъективный вопрос, но для меня (атомарные) обновления документов - это то, что делает mongodb мощным. И я не могу видеть, чтобы ты использовал это так много. И вдобавок ко всему, вы также сталкиваетесь с проблемой ограничения размера документа (с опытом я могу сказать, что встраивание файлов в mongodb не очень хорошая идея). Вы также хотите иметь приложение для чата в реальном времени поверх базы данных.
Ваша схема документа выглядит логичной. Но я бы не стал использовать mongodb для такого рода проектов, где ваше приложение сильно зависит от вставок. Я бы пошел на CouchDB.
С CouchDB вам не придется беспокоиться о проблеме вложений, вы можете легко их встраивать. «_changes» сделает вашу жизнь намного проще, если вы просто создадите приложение для чата в реальном времени / поисковую систему с длинным пулом / фидом (если вы захотите его реализовать).
И я увидел проект с открытым исходным кодом в Кушоне. Это имеет некоторые сходства с вашими целями: Anologue . Вы должны это проверить.
PS: Извините, это было немного не по теме, но я не мог удержаться.