MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Bagaimana cara menghasilkan dokumen Mongodb secara rekursif menggunakan driver mongocxx c++?

Sulit untuk memastikan tanpa melihat konteks segmen yang Anda poskan, tetapi sepertinya masalah yang Anda hadapi adalah dengan jenis keluaran << operator pada pembuat aliran. Pembuat aliran sebenarnya salah nama; itu bukan "aliran" dalam arti kata C++ yang khas, sebagai tipe keluaran dari << operator kadang-kadang akan berbeda dari operan sisi kiri. Khususnya, setiap kali Anda menggunakan sesuatu seperti open_document atau close_document , jenis keluaran ekspresi akan berbeda dari operan sisi kiri. Karena itu, Anda biasanya perlu menyimpan output dari salah satu ekspresi tersebut.

Karena kebingungan yang sering disebabkan oleh pembuat aliran dalam kasus seperti ini, umumnya lebih baik menggunakan pembuat dasar saja. Meskipun sintaks pembangun dasar sedikit lebih bertele-tele, akan lebih sulit untuk membuat kesalahan halus dengannya, dan ketika Anda melakukan kesalahan, pesan kesalahan kompilator jauh lebih mudah dipahami.

Inilah cara Anda membuat dokumen yang sama dengan pembuat dasar:

#include <bsoncxx/builder/basic/document.hpp>
#include <bsoncxx/builder/basic/kvp.hpp>
#include <bsoncxx/builder/basic/sub_document.hpp>

using bsoncxx::builder::basic::kvp;
using bsoncxx::builder::basic::sub_document;

bsoncxx::builder::basic::document doc;

// Build the document
doc.append(kvp("MainType", [](sub_document sub_doc1) {
    sub_doc1.append(kvp("TLSRecord", [](sub_document sub_doc2) {
        sub_doc2.append(kvp("type", "16"),
                        kvp("version", "0301"),
                        kvp("length", "012C"),
                        kvp("hsMsg", [](sub_document sub_doc3) {
                            sub_doc3.append(kvp("type", "01"),
                                            kvp("length", "000128"),
                                            kvp("clientHello", [](sub_document sub_doc4) {
                                                sub_doc4.append(
                                                    kvp("version", "0303"),
                                                    kvp("random", "40C70E243001B96D8C"),
                                                    kvp("session_id_length", ""));
                                            }));
                        }));
    }));
}));

// Get a view of the document being built and do something with it.
do_something_with_document_view(doc.view());

// Extract the document from the builder and do something with it.
do_something_with_owned_document(doc.extract());

bsoncxx::builder::basic::document::append mengambil sejumlah kvp 's (pasangan nilai kunci) dan menambahkannya ke builder. Untuk tipe dasar seperti string, Anda bisa meneruskan nilai sebagai argumen kedua. Untuk membuat subdokumen, gunakan lambda sebagai argumen kedua yang menggunakan bsoncxx::builder::basic::sub_document lalu tambahkan ke pembuat subdokumen tersebut dengan cara yang sama.

Untuk mengeluarkan dokumen dari pembuat, Anda dapat menggunakan view() atau extract() metode. view() mengembalikan bsoncxx::document::view() , yang merupakan tampilan dokumen yang tidak dimiliki; pembangun harus tetap hidup selama tampilan digunakan. extract() mengembalikan bsoncxx::document::value, yang merupakan nilai yang dimiliki; ketika extract() dipanggil, builder direset kembali ke keadaan kosong.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Hanya mengambil dokumen yang dibuat dalam 24 jam terakhir?

  2. Aplikasi Node / Express tidak dapat terhubung ke docker mongodb

  3. Apakah mungkin untuk mengganti nama bidang _id setelah agregasi grup mongo?

  4. Kueri agregasi Mongodb untuk mengurangi dan mengelompokkan nilai kumulatif

  5. Dengan mongodb dan panduan untuk Id dokumen, apa cara efisien untuk menyimpan Panduan untuk dengan mudah mengambil Panduan yang sebenarnya?