Обновление вложенных документов в mongodb

В дополнение к другим причинам, уже указанным, это - ситуация, в которой класс реализует два различных интерфейса, которые имеют свойство/метод с тем же именем и подписью.

/// <summary>
/// This is a Book
/// </summary>
interface IBook
{
    string Title { get; }
    string ISBN { get; }
}

/// <summary>
/// This is a Person
/// </summary>
interface IPerson
{
    string Title { get; }
    string Forename { get; }
    string Surname { get; }
}

/// <summary>
/// This is some freaky book-person.
/// </summary>
class Class1 : IBook, IPerson
{
    /// <summary>
    /// This method is shared by both Book and Person
    /// </summary>
    public string Title
    {
        get
        {
            string personTitle = "Mr";
            string bookTitle = "The Hitchhikers Guide to the Galaxy";

            // What do we do here?
            return null;
        }
    }

    #region IPerson Members

    public string Forename
    {
        get { return "Lee"; }
    }

    public string Surname
    {
        get { return "Oades"; }
    }

    #endregion

    #region IBook Members

    public string ISBN
    {
        get { return "1-904048-46-3"; }
    }

    #endregion
}

Этот код компиляции и выполнения хорошо, но свойство Title совместно используется.

Очевидно, мы хотели бы значение Заголовка, возвращенного для зависимости от того, рассматривали ли мы Class1 как Книгу или Человека. Это - когда мы можем использовать явный интерфейс.

string IBook.Title
{
    get
    {
        return "The Hitchhikers Guide to the Galaxy";
    }
}

string IPerson.Title
{
    get
    {
        return "Mr";
    }
}

public string Title
{
    get { return "Still shared"; }
}

Уведомление, что явные интерфейсные определения выведены для Общественности - и следовательно Вы не можете объявить, что они общедоступны (или иначе) явно.

Примечание также, что у Вас может все еще быть "общая" версия (как показано выше), но пока это возможно, существование такого свойства сомнительно. Возможно, это могло использоваться в качестве реализации по умолчанию Заголовка - так, чтобы существующий код не должен был быть изменен для кастинга Class1 к IBook или IPerson.

, Если Вы не определяете "общий" (неявный) Заголовок, потребители Class1 должны явно экземпляры броска Class1 к IBook или IPerson сначала - иначе, код не скомпилирует.

15
задан Salvador Dali 22 April 2015 в 00:54
поделиться

2 ответа

Для меня из оболочки mongo - поэтому я не уверен, что случилось с вами выше. Попробуйте это и посмотрите, работает ли это? В таком случае я бы посоветовал взять последний код mongo на случай, если что-то было проблематичным.

x = { 'name': 'test', anotherdoc: { 'something': 'someval', somenum : 1 } }
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection = db.foo;
test.foo
> collection.insert(x)
> collection.find()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x
{"name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> x._id
> x = collection.findOne()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"something" : "someval" , "somenum" : 1}}
> collection.update({'_id': x._id}, {$set: {'anotherdoc.something': 'somenewval'}} )
> collection.find()
{"_id" :  ObjectId( "4a61b6711591f41f0f1bc5ff")  , "name" : "test" , "anotherdoc" : {"somenum" : 1 , "something" : "somenewval"}}
> 

Как упоминалось выше, форумы MongoDB, вероятно, будут видны быстрее (или попробуйте IRC).

14
ответ дан 1 December 2019 в 04:34
поделиться

Лучше спросите об этом в googlegroup пользователя mongodb. Ответ на ваш вопрос здесь http://groups.google.com/group/mongodb-user/msg/583d37ef41ef5cca?hl=en

0
ответ дан 1 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: