我正在使用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; }
}
我想查询具有UserData我获取该用户的UserSettings。 我尝试以下但不起作用:
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'。
有什么想法吗?或解决方法?谢谢!
答案 0 :(得分:1)
斯里达尔在这里回答了我的问题: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对于单个文档的场景非常有用 集合可以引用来自多个其他集合的文档。