我正在使用MongoDB官方驱动程序(10Gen)。而且我无法查询MonogoDBRef属性。我有以下课程:
public class UserData
{
private ObjectId id;
public ObjectId _id
{
get { return id; }
set { id = value; }
}
[BsonElement("Mail")]
public string Email { get; set; }
public string Name{ get; set; }
}
public class UserSettings
{
private ObjectId id;
public ObjectId _id
{
get { return id; }
set { id = value; }
}
[BsonElement("usr")]
public MongoDBRef User { get; set; }
public List<SettingsUser> Settings{ get; set; }
}
我要查询的是拥有要获取该用户的UserSettings的UserData。我尝试以下操作,但不起作用:
var colletion = db.GetCollection<UserSettings>("UsrSettings");
collection.Find(Query.EQ("usr", usr._id);
我也尝试过这个:
collection.Find(Query.EQ("usr", new MongoDBRef("UsrSettings", usr._id));
但是它不能编译,因为MongoDBRef不是BsonValue。
另一种尝试:
collection.FindOne(Query.EQ("usr.$id", User._id));
而且我得到了例外:意外的元素'$ ref'。
有什么想法吗?或解决方法?谢谢!
Sridhar在这里回答了我的问题:https://groups.google.com/forum/#!msg/mongodb-user/Tip9AQa_1TE/YAgflwJa3tAJ
以下内容将为您提供所需的内容(请注意,我正在使用1.1驱动程序)
var refDocument = new BsonDocument {
{"$ref", "userdata"},
{"$id", usr._id}
};
var query = Query.EQ("usr", refDocument);
var result = userDataCollection.FindOne(query);
这里userdata是存储用户数据的集合的名称。话虽如此,如果所有文件都在UserSettings集合中总是只引用UserData集合中的文档,那么您应该只使用手册中指定的参考http://www.mongodb.org/display/DOCS/Database+References#DatabaseReferences-DBRef。DBRefs对于单个文档在单个文档中的情况很有用集合可以引用多个其他集合中的文档。