我正在使用以下内容
蒙戈 3.2.7 Spring 4.3.1 发布
我已经创建了具有以下权限的关注用户。
> use admin
switched to db admin
> db.getUser("UserAdminNew")
{
"_id" : "admin.UserAdminNew",
"user" : "UserAdminNew",
"db" : "admin",
"roles" : [
{
"role" : "readWrite",
"db" : "admin"
},
{
"role" : "root",
"db" : "admin"
},
{
"role" : "readWrite",
"db" : "NEWTest"
}
]
}
在 DB NEWTest 中我有下面提到的集合
> use NEWTest
switched to db NEWTest
> show collections
Friends
users
usersD
如果我正在从控制台插入并尝试在 usersD 中查找文档,它工作正常。
当我尝试从 spring 开始做同样的事情时。即使我能够插入文档,查找也会失败并出现以下错误堆栈。
1. user : UserD [id=578deb8a0c58602128ead56a, username=Dhara, password=password_000]
1.1. user : UserD [id=578deb8a0c58602128ead56b, username=Subrat Dash, password=password_111]
query1 - Query: { "username" : "Dhara"}, Fields: null, Sort: null
Exception in thread "main" org.springframework.data.mongodb.UncategorizedMongoDbException: Query failed with error code 13 and error message 'not authorized on NEWTest to execute command { find: "usersD", filter: { username: "Dhara" }, limit: 1, singleBatch: true }' on server 127.0.0.1:27017; nested exception is com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'not authorized on NEWTest to execute command { find: "usersD", filter: { username: "Dhara" }, limit: 1, singleBatch: true }' on server 127.0.0.1:27017
at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:107)
at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:2114)
at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1904)
at org.springframework.data.mongodb.core.MongoTemplate.doFindOne(MongoTemplate.java:1712)
at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:586)
at org.springframework.data.mongodb.core.MongoTemplate.findOne(MongoTemplate.java:581)
at com.mydhara.core.App.main(App.java:60)
Caused by: com.mongodb.MongoQueryException: Query failed with error code 13 and error message 'not authorized on NEWTest to execute command { find: "usersD", filter: { username: "Dhara" }, limit: 1, singleBatch: true }' on server 127.0.0.1:27017
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:492)
at com.mongodb.operation.FindOperation$1.call(FindOperation.java:482)
at com.mongodb.operation.OperationHelper.withConnectionSource(OperationHelper.java:239)
at com.mongodb.operation.OperationHelper.withConnection(OperationHelper.java:212)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:482)
at com.mongodb.operation.FindOperation.execute(FindOperation.java:79)
at com.mongodb.Mongo.execute(Mongo.java:772)
at com.mongodb.Mongo$2.execute(Mongo.java:759)
at com.mongodb.DBCollection.findOne(DBCollection.java:777)
at com.mongodb.DBCollection.findOne(DBCollection.java:747)
at com.mongodb.DBCollection.findOne(DBCollection.java:694)
at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2143)
at org.springframework.data.mongodb.core.MongoTemplate$FindOneCallback.doInCollection(MongoTemplate.java:2127)
at org.springframework.data.mongodb.core.MongoTemplate.executeFindOneInternal(MongoTemplate.java:1901)
... 4 more
App.java
package com.mydhara.core;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.data.mongodb.core.MongoOperations;
import org.springframework.data.mongodb.core.convert.QueryMapper;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import com.mydhara.config.SpringMongoConfig;
import com.mydhara.config.SpringMongoConfig1;
import com.mydhara.model.Friends;
import com.mydhara.model.UserD;
import org.springframework.context.support.GenericXmlApplicationContext;
public class App {
public static void main(String[] args) {
// For XML
ApplicationContext ctx = new GenericXmlApplicationContext("SpringConfig.xml");
// For Annotation
//ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig1.class);
MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");
UserD user = new UserD("Dhara", "password_000");
// save
mongoOperation.save(user);
UserD user1 = new UserD("Subrat Dash", "password_111");
// save
mongoOperation.save(user1);
// now user object got the created id.
System.out.println("1. user : " + user);
System.out.println("1.1. user : " + user1);
// query to search user
Query searchUserQuery = new Query(Criteria.where("username").is("Dhara"));
// BasicQuery searchUserQuery = new BasicQuery("{ username:'Dhara'}");
System.out.println("query1 - " + searchUserQuery.toString());
// find the saved user again.
//UserD savedUser =mongoOperation.findOne(username:'Dhara', UserD.class);
UserD savedUser = mongoOperation.findOne(searchUserQuery, UserD.class);
System.out.println("2. find - savedUser : " + savedUser);
// update password
mongoOperation.updateFirst(searchUserQuery, Update.update("password", "new password"),
UserD.class);
// find the updated user object
UserD updatedUser = mongoOperation.findOne(
new Query(Criteria.where("username").is("Dhara")), UserD.class);
System.out.println("3. updatedUser : " + updatedUser);
// delete
// mongoOperation.remove(searchUserQuery, User.class);
// List, it should be empty now. but added subrat so 1
List<UserD> listUser = mongoOperation.findAll(UserD.class);
//rnd
String[] originalId =new String[4];
int i=0;
for(UserD userN : listUser) {
originalId[i]=userN.getId();
System.out.println("value of i-------------"+i+"--------"+originalId[i]);
i++;
}
//adding a friend
Friends friend = new Friends("Anjusha", "password_000" , originalId[1]);
mongoOperation.save(friend);
Friends friend2 = new Friends("Martin", "password_111" , originalId[1]);
mongoOperation.save(friend2);
Friends friend3 = new Friends("Geo George", "password_222" , originalId[0]);
mongoOperation.save(friend3);
//ends
System.out.println("4. Number of user = " + listUser.size());
System.out.println("5. All User = " + listUser);
List<Friends> listFriends = mongoOperation.findAll(Friends.class);
System.out.println("6. Number of Friends = " + listFriends.size());
System.out.println("7. All Friends = " + listFriends);
// query to search friends
Query searchUserQueryN = new Query(Criteria.where("userId").is(originalId[1]));
List<Friends> savedUser1 = mongoOperation.find(searchUserQueryN, Friends.class);
System.out.println("--- find - friends of Subrat Dash : " + savedUser1);
Query searchUserQueryM = new Query(Criteria.where("userId").is(originalId[0]));
List<Friends> savedUser2 = mongoOperation.find(searchUserQueryM, Friends.class);
System.out.println("--- find - friends of Dhara : " + savedUser2);
// save
mongoOperation.save(user);
}
}
springconfig.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<mongo:mongo host="127.0.0.1" port="27017" />
<mongo:db-factory dbname="NEWTest" username="UserAdminNew"
password="Dhara123" /> <!-- orig NEWTest -->
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<!-- <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
-->
<!-- <property name="writeResultChecking" value="EXCEPTION"/>
<property name="writeConcern" value="FSYNC_SAFE"/> -->
<constructor-arg ref="mongo" />
<constructor-arg name="databaseName" value="NEWTest" />
<!-- added to chk auth feature -->
<constructor-arg name="userCredentials" ref="userCredentials"/>
</bean>
<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
<constructor-arg name="username" value="UserAdminNew" />
<constructor-arg name="password" value="Dhara123" />
</bean>
<!-- added to chk auth feature ENDS HERE -->
</beans>
关于这里可能出现的问题的任何建议。(根据我的理解,readWrite 角色能够执行查找,我也可以从 mongo 控制台执行相同的操作,但不能从 spring 执行)
提前致谢
最佳答案
为你的 Spring xml 配置试试这个
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<mongo:mongo-client credentials="UserAdminNew:Dhara123@admin" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongo" />
<constructor-arg name="databaseName" value="NEWTest" />
</bean>
</beans>
关于spring - 查询失败,错误代码 13 和错误消息“未授权 [db] 执行命令 { find :,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38454541/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我想用ruby编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r