MongoDBRef, как написать запрос - PullRequest
2 голосов
/ 28 июня 2011

Я работаю с официальным драйвером 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; }
}

Я хочу сделать запрос, для которого при наличии пользовательских данных я получаю пользовательские настройки этого пользователя. Я пытаюсь следующее, но это не работает:

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 Ответ

1 голос
/ 30 июня 2011

Шридхар ответил на мой вопрос здесь: 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 полезны для сценария, в котором документы в одной коллекции могут ссылатьсядокументы из нескольких других коллекций.

...