【问题标题】:How to use FIND() for a MongoDB query on a MVC .net C# project如何在 MVC .net C# 项目上使用 FIND() 进行 MongoDB 查询
【发布时间】:2018-01-04 23:46:39
【问题描述】:

我正在将 MongoDB (Azure) 与 MVC .NET C# 项目连接起来。到目前为止,连接和对象定义工作得非常好。我的问题是当我尝试添加方法 FIND() 以返回对象 USER 中的所有数据时。

我的模特:

using System;
using System.Collections.Generic;
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Driver;
using MongoDB.Driver.Builders;

namespace backendnet.Models
{
    public class MongoCore
    {    
        public class DB
        {
            static MongoClient Client = new MongoClient("mongodb://mydbconnect");
            static public IMongoDatabase Database = Client.GetDatabase("mydb");
            static public IMongoCollection<User> Users = Database.GetCollection<User>("users");
        }

        public class User
        {
            [BsonId]
            public ObjectId Id { get; set; }
            [BsonElement("email")]
            public string Email { get; set; }
            [BsonElement("password")]
            public string Password { get; set; }
            [BsonElement("name")]
            public List<DimensionName> Name { get; set; }
            [BsonElement("address")]
            public List<DimensionAddress> Address { get; set; }
            [BsonElement("permissions")]
            public List<DimensionPermissions> Permissions { get; set; }
            [BsonElement("status")]
            public string Status { get; set; }
            [BsonElement("created")]
            public string Created { get; set; }
            [BsonElement("updated")]
            public string Updated { get; set; }    
        }

        public class DimensionName
        {
            [BsonElement("first")]
            public string First { get; set; }
            [BsonElement("last")]
            public string Last { get; set; }    
        }

        public class DimensionAddress
        {
            [BsonElement("stree")]
            public string Stree { get; set; }
            [BsonElement("number")]
            public string Number { get; set; }
            [BsonElement("city")]
            public string City { get; set; }
            [BsonElement("state")]
            public string State { get; set; }
            [BsonElement("zipcode")]
            public string Zipcode { get; set; }
            [BsonElement("type")]
            public string Type { get; set; }
        }

        public class DimensionPermissions
        {
            [BsonElement("list")]
            public string List { get; set; }
            [BsonElement("create")]
            public string Create { get; set; }
            [BsonElement("edit")]
            public string Edit { get; set; }
            [BsonElement("delete")]
            public string Delete { get; set; }
        }
    }
}

我的控制器:

using System;
using System.Collections.Generic;
using System.Web.Mvc;
using backendnet.Models;
using MongoDB.Bson;

namespace backendnet.Controllers
{    
    public class DashboardController : Controller
    {    
        private string _viewFolder = "../Admin/Dashboard";

        public ActionResult Index()
        {
            var results = new MongoCore.DB();
            ViewData["ListPost"] = results.ToJson();

            return View (_viewFolder);
        }            
    }
}

我的部分观点:

<p>HERE: @ViewData["ListPost"]</p>

我明白了:

这里:{ }

所以我尝试在 Model -> DB 中添加方法 Find:

MongoCursor<User> cursor = Users.Find("Email" != "");

但总是显示错误:

表达式始终为“真”["Email" != ""]

谁能告诉我我在这里缺少什么?

【问题讨论】:

    标签: c# asp.net-mvc mongodb azure asp.net-mvc-4


    【解决方案1】:
    public ActionResult GetUsers()
    {
     MongoServer objServer = MongoServer.Create("Server=localhost:27017");
     MongoDatabase objDatabse = objServer.GetDatabase("DBName");
     List UserDetails = objDatabse.GetCollection("Colletion_Name").FindAll().ToList();
     return View(UserDetails);
    }
    

    【讨论】:

    • 这是 mongoDB find() 元素的演示,您可以为自己集成
    • 我编辑代码以获取您可以尝试的所有数据。在这里,我使用 localhost 作为服务器,您可以提供服务器地址并输入 DBName 作为数据库名称,Collection_Name 作为您的集合。试试这个快乐的编码。
    【解决方案2】:

    我没看到你在调用 MongoDB.Find()?我已经粘贴了我用于 MongoDB C# 驱动程序的代码下面,以便根据我的 MongoDB 数据库中的键:值对获得记录。

    Find 或 FindAsync 方法都需要一个 BsonDocument 参数,它可以使用 Builders 创建,如下所示。您的过滤器可以为空,这将获取所有记录,因为您没有过滤掉任何内容。

    调用 find 方法后,您将能够使用 Lambda 或其他查询方法访问信息。您可以在我的查询中看到我只需要一条记录,所以我要求 FirstOrDefault。希望这会有所帮助。

        async Task<Document> IDal.GetRecordAsync(string key, string value)
        {
            try
            {
                if (Database == null) ((IDal)this).StartConnection();
                var filter = Builders<BsonDocument>.Filter.Eq(key, value);
                var cursor = await Collection.FindAsync(filter);
                var bsondocument = cursor.FirstOrDefault();
                return bsondocument == null ? null : _converter.ConvertBsonDocumentToDocument(bsondocument);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return null;
            }
        }
    

    【讨论】:

    • 感谢@CodeSurvivor,但我不知道如何在我的实际模型中实现该解决方案
    猜你喜欢
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 2011-06-25
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多