我已经使用doc示例中的标记字段配置了我的副本集:
{
"_id" : "rs0",
"version" : 2,
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"tags" : {
"dc": "east",
"use": "production"
}
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"tags" : {
"dc": "east",
"use": "reporting"
}
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"tags" : {
"use": "production"
}
}
]
}
现在我的问题是,如果我发送阅读问题,如“最近”,“primarypreferred”,它可以自动选择这个标签,或者我应该传递“dc”名称和我的查询查询。如果有人我可以帮助我。
答案 0 :(得分:1)
如果你想用你的阅读偏好设置标签(除了主要内容之外的任何标签),你必须手动设置它,例如:
DBCollection collection = ...
ReadPreference dcReadPref =
ReadPreference.nearest(new BasicDBObject("dc", "east"));
collection.findOne(new BasicDBObject("field", "value"), null, dcReadPref);
不幸的是,find()
方法没有包含ReadPreference
作为参数的方差(至少在javadoc中找不到)。你必须做这样的事情:
DBCollection collection = ...
ReadPreference defaultReadPref = collection.getReadPreference();
collection.setReadPreference(dcReadPref);
...
collection.find(new BasicDBObject("field", "value"));
...
collection.setReadPreference(defaultReadPref); // when done restore default
您可以在驱动程序,数据库,集合或操作级别设置读取首选项(w / wo标记)。
还要将您的环境包含在标记集中:
String env = ... / get it from somewhere
DBObject dcTag = new BasicDBObject("dc", "east"):
DBObject envTag = new BasicDBObject("use", env);
ReadPreference pref = ReadPreference.primaryPreferred(dcTag, envTag);