Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命令查找失败:未授权在上执行命令{find:_C#_Mongodb - Fatal编程技术网

C# 命令查找失败:未授权在上执行命令{find:

C# 命令查找失败:未授权在上执行命令{find:,c#,mongodb,C#,Mongodb,我正在尝试从我的C MVC ASP.net应用程序执行FindOne 不幸的是,此操作失败,出现以下错误: “MongoDB.Driver.MongoCommandException”类型的未处理异常 在MongoDB.Driver.Core.dll中发生 其他信息:命令查找失败:未在上授权 twitterstream执行命令{find:tweets,filter:{},limit: 1,singleBatch:true} 如果启动MongoDB shell并运行以下命令: > use t

我正在尝试从我的C MVC ASP.net应用程序执行FindOne

不幸的是,此操作失败,出现以下错误:

“MongoDB.Driver.MongoCommandException”类型的未处理异常 在MongoDB.Driver.Core.dll中发生

其他信息:命令查找失败:未在上授权 twitterstream执行命令{find:tweets,filter:{},limit: 1,singleBatch:true}

如果启动MongoDB shell并运行以下命令:

> use twitterstream
switched to db twitterstream
> db.auth("demouser", "abcd")
1
> db.tweets.findOne()
findOne命令执行并显示一条记录

我做错了什么,或者在我的C应用程序中遗漏了哪些步骤

为了使测试用例尽可能小,我使用下面列出的控制台应用程序再现了这个问题:

我正在使用MongoDB 3.4.6

控制台应用程序依赖于两个NuGet软件包:MongoDB.Driver 2.4.4和mongocsharpdriver 2.4.4

App.config

推特模型

Program.cs

Mongo驱动程序:

<package id="MongoDB.Driver" version="2.4.4" targetFramework="net46" />
试一试

Mongo驱动程序:

<package id="MongoDB.Driver" version="2.4.4" targetFramework="net46" />
试一试


多亏了这个链接,终于弄清了这个问题的真相

本页最重要的一段是:

MongoDB的默认身份验证方法是质询和响应 机制紧急停堆-SHA-1。之前,MongoDB使用MongoDB挑战 并将响应MONGODB-CR作为默认值

在进行任何更改之前查看demouser,我将看到以下内容:

需要注意的是,使用的凭证是SCRAM-SHA-1

按照链接中的说明,我禁用了身份验证,然后在Mongo shell中使用以下命令,我将Mongo实例更改为使用旧的身份验证方法:

> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 
3 
> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 
然后我启用了身份验证,删除并重新创建了demouser:注意,凭据现在使用预期的MONGODB-CR


重新运行控制台应用程序,如我的问题中所示,findOne命令现在按预期工作。

由于此链接,最终找到了问题的根源

本页最重要的一段是:

MongoDB的默认身份验证方法是质询和响应 机制紧急停堆-SHA-1。之前,MongoDB使用MongoDB挑战 并将响应MONGODB-CR作为默认值

在进行任何更改之前查看demouser,我将看到以下内容:

需要注意的是,使用的凭证是SCRAM-SHA-1

按照链接中的说明,我禁用了身份验证,然后在Mongo shell中使用以下命令,我将Mongo实例更改为使用旧的身份验证方法:

> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 
3 
> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) 
然后我启用了身份验证,删除并重新创建了demouser:注意,凭据现在使用预期的MONGODB-CR


重新运行控制台应用程序,如我的问题所示,findOne命令现在可以正常工作。

@Mate:在更新1I下为demouser添加了Mongo角色。我更新了MongoDB的答案。驱动程序2.4。4@Mate:在更新1I下为demouser添加了Mongo角色。我更新了MongoDB的答案。驱动程序2.4.4感谢您抽出时间要回答,但这段代码在做什么?我可以看到您正在尝试使用不同的方法连接到数据库,解释为什么我应该使用此方法会很有帮助。此外,您为什么不使用我的示例中所示的Find命令?我感谢您花时间回答,但这段代码在做什么?我可以看到您正试图使用不同的方法连接到数据库,解释一下为什么我应该使用此方法会很有帮助。此外,您为什么不使用我的示例中所示的Find命令?
> db.getUser("demouser")
{
        "_id" : "twitterstream.demouser",
        "user" : "demouser",
        "db" : "twitterstream",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "twitterstream"
                },
                {
                        "role" : "read",
                        "db" : "twitterstream"
                }
        ]
}
<package id="MongoDB.Driver" version="2.4.4" targetFramework="net46" />
            var _conn = string.Format(@"mongodb://{0}:{1}@{2}:{3}/{4}"
                                , MongoUsername
                                , MongoPassword
                                , MongoHost
                                , MongoPort
                                , MongoDatabaseName);

            var _client = new MongoClient(_conn);
            var _database = _client.GetDatabase(MongoDatabaseName);


            var twees = _database.GetCollection<Group>("tweets");
            var r = twees.AsQueryable().Select(x => x).ToList();

            Console.WriteLine(r.Count());
> use admin 
switched to db admin 
>  var schema = db.system.version.findOne({"_id" : "authSchema"}) 
> schema.currentVersion = 3 
3 
> db.system.version.save(schema) 
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })