MongoDB, бірнеше деңгейлі нүкте белгісімен бар ендірілген құжатта жаңа {өріс: мән} қосыңыз?

Мен не істеуді жоспарлап жүрмін, блог жазбасы үшін жаңа өріс (өріс: value) қосыңыз. Мәселен, егер, мысалы, websites.blog_posts.url: 'http://www.example.com/01.html' сайтындағы әсерлерді қадағалауды бастау керек болса, сол жазба үшін бұл әсер таңбаларын қалай қосуға болады?

Менің ағымдағы құжат құрылымы:

{ 
email_address: '[email protected]', 
password: 'random_password',
first_name: 'John',
last_name: 'Doe',
user_type: 'WEBMASTER',
newsletter: 'NO',
websites: [{
    main_title: 'My Blog Website',
    main_url: 'http://www.example.com',
        blog_posts: [{
            url: 'http://www.example.com/01.html',
            title:'My first blog post',
            description: 'My first description.'
        }, { 
            url: 'http://www.example.com/02.html',
            title: 'My second blog post',
            description: 'My second description.'
        }, { 
            url: 'http://www.example.com/03.html',
            title: 'My third blog post',
            description: 'My third description.'
        }, { 
            url: 'http://www.example.com/04.html',
            title: 'My fourth blog post',
            description: 'My fourth description.'
        }]
    }]
}

Міне, жаңалықты пайдаланып, шынайы TRUE жасау арқылы жұмыс істейтін болар едім.

db.my_collection.update ({'websites.blog_posts.url': 'http://www.example.com/01.html'}, {'$ set': {'websites.blog_posts.impressions': 549}}, шын)

The error that I received is: *can't append to array using string field name [blog_posts]*

Мүмкін, «$ set» бұл үшін дұрыс емес немесе, мүмкін, бұл нүкте белгісімен терең сілтеме бере алмаймын ба? Мен кеше ғана MongoDB-ді қолдануға кірісіп кеттім, кез келген көмек керемет болар еді.

Рақмет сізге!

6

1 жауаптар

Схемаңызды ескере отырып, не істеуге тырысасыз? Нүктелік белгі көп деңгейлі болуы мүмкін, бірақ алаптың бір деңгейінен артық болса, ол '$' позициялық операторы арқылы жойылмайды.

Мысалы: сізге керек:

db.my_collection.update( 
    {'websites.blog_posts.url': 'http://www.example.com/01.html' },
    {'$set': {'websites.$.blog_posts.$.impressions': 549}},
     true );

Бірақ жаңартуда екі орынды операторлар болуы мүмкін емес, өйткені MongoDB тек бірінші массивіндегі элементтің орнын анықтай алады.

Сіздің жалғыз опция - бұл схеманы қайта өңдеу веб-сайттарына арналған арнайы топтама болу (бұл жағдайда басқа себептерге қарағанда жақсы).

5
қосылды
Сіз дұрыс, менің проблемам менің схема және ендірілген құжатты сақтауға қате кронштейндер болды. Оның орнына мен массивке арналған жақшаларды қолдандым. Мен қазір 4 сызықты жаңа өрістерді дұрыс схемамен нүкте белгісін пайдаланып тереңірек қостық.
қосылды автор Chris, көзі
Керемет, сәттілік;)
қосылды автор Remon van Vliet, көзі