Выяснил проблему! Линия:
var messageCollection = database.GetCollection<MessageViewModel>("messages")
в моем контроллере должно было быть:
var messageCollection = database.GetCollection<MessageViewModel>("message")
Поэтому я пытаюсь создать веб-сайт с использованием asp.net MVC и включает приложение чата, которое использует MongoDb для хранения сообщений. Проблема, с которой я сталкиваюсь, заключается в том, что я не знаю, как получить все сообщения из коллекции и отобразить их в моем представлении.
Вот моя модель:
public class MessageViewModel
{
public ObjectId _id { get; set; }
public string FirstName { get; set; }
public string UserName { get; set; }
public string Text { get; set; }
}
Мой контроллер:
MongoClient client;
IMongoDatabase database;
public UserController()
{
client = new MongoClient("mongodb://localhost:27017");
database = client.GetDatabase("UserMessaging");
}
public ActionResult Messages()
{
var username = User.Identity.Name;
MessageViewModel model = new MessageViewModel();
var messageCollection = database.GetCollection<MessageViewModel>("messages");
var messages = from m in messageCollection.AsQueryable()
where m.UserName == User.Identity.GetUserName()
select m;
return View(messages.ToList());
}
И мое мнение:
<h2>Messages</h2>
<form class="navbar-form">
<input type="text" class="form-control" id="SearchUser" placeholder="Type a user" />
<input type="hidden" id="project-id" />
</form>
<div class="container">
<ul id="discussion">
@if (Model != null)
{
{ int i = 0; }
foreach (var item in Model)
{
<li><p>@item.Text</p></li>
}
}
</ul>
</div>
Я новичок в MongoDb, поэтому мне очень жаль, если я его полностью уничтожил! Если вам нужны какие-либо подробности, просто дайте мне знать. Спасибо!
c#,asp.net,asp.net-mvc,mongodb,mongodb-query,
Просто подумайте, если вы используете драйвер MongoDb 2.0 (и асинхронный), вы можете использовать родной Find (), и он будет выглядеть примерно так:
var messageCollection = database.GetCollection<MessageViewModel>("message")
var results = messageCollection.Find(x => true).ToListAsync();
Это вернет все элементы коллекции