MongoDBRef如何编写查询

时间:2011-06-28 19:44:48

标签: c# mongodb mongodb-.net-driver

我正在使用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'。

有什么想法吗?或解决方法?谢谢!

1 个答案:

答案 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对于单个文档的场景非常有用 集合可以引用来自多个其他集合的文档。