de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 niels_h
niels_h
Question

Bagaimana mendefinisikan objek dalam array di Luwak skema benar dengan 2d geo indeks

I'm saat ini mengalami masalah dalam menciptakan sebuah skema untuk dokumen di bawah ini. Respon dari server selalu kembali "trk" nilai-nilai bidang sebagai [Objek]. Entah bagaimana aku tidak tahu bagaimana harus bekerja, seperti yang saya mencoba setidaknya semua pendekatan yang masuk akal untuk saya ;-)

Jika ini bisa membantu, saya Luwak versi 3.6.20 dan MongoDB 2.4.7 Dan sebelum aku lupa, itu akan menjadi bagus untuk juga menetapkan itu sebagai Index (2d)

Data asli:

{
    "_id": ObjectId("51ec4ac3eb7f7c701b000000"),
    "gpx": {
        "metadata": {
            "desc": "Nürburgring VLN-Variante",
            "country": "de",
            "isActive": true
        },
    "trk": [
    {
        "lat": 50.3299594,
        "lng": 6.9393006
    },
    {
        "lat": 50.3295046,
        "lng": 6.9390688
    },
    {
        "lat": 50.3293714,
        "lng": 6.9389939
    },
    {
        "lat": 50.3293284,
        "lng": 6.9389634
    }]
    }
}

Luwak Skema:

var TrackSchema = Schema({
            _id: Schema.ObjectId,
            gpx: {
                metadata: {
                    desc: String,
                    country: String,
                    isActive: Boolean
                },
                trk: [{lat:Number, lng:Number}]
            }
        }, { collection: "tracks" });

Respon dari Jaringan tab di Chrome selalu terlihat seperti ini (yang's hanya trk-bagian yang salah) :

{ trk: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],

Saya sudah mencoba berbagai Skema definisi untuk "trk":

  1. trk: Skema.Jenis.Campuran
  2. trk: [Schema.Jenis.Dicampur]
  3. trk:[ { type:[Nomor], index: "2d" }]

Harap anda dapat membantu saya ;-)

106 2013-10-30T22:31:09+00:00 4
Pemrograman
mongodb
schema
geo
node.js
mongoose
Solution / Answer
 Kundu
Kundu
31 Oktober 2013 в 8:50
2013-10-31T08:50:33+00:00
Lebih
Sumber
Sunting
#22671812

Anda dapat mendeklarasikan trk dengan cara berikut : - baik

trk : [{
    lat : String,
    lng : String
     }]

atau

trk : { type : Array , "default" : [] }

Dalam kasus kedua selama penyisipan membuat objek dan mendorongnya ke dalam array seperti

db.update({'Searching criteria goes here'},
{
 $push : {
    trk :  {
             "lat": 50.3293714,
             "lng": 6.9389939
           } //inserted data is the object to be inserted 
  }
});

atau anda dapat mengatur Array dari objek dengan

db.update ({'seraching criteria goes here ' },
{
 $set : {
          trk : [ {
                     "lat": 50.3293714,
                     "lng": 6.9389939
                  },
                  {
                     "lat": 50.3293284,
                     "lng": 6.9389634
                  }
               ]//'inserted Array containing the list of object'
      }
});
196
0
Pierre Maoui
Pierre Maoui
16 Desember 2013 в 5:18
2013-12-16T17:18:22+00:00
Lebih
Sumber
Sunting
#22671814

Aku punya masalah yang sama dengan luwak :

fields: 
    [ '[object Object]',
     '[object Object]',
     '[object Object]',
     '[object Object]' ] }

Pada kenyataannya, saya menggunakan "type" sebagai nama properti dalam skema saya :

fields: [
    {
      name: String,
      type: {
        type: String
      },
      registrationEnabled: Boolean,
      checkinEnabled: Boolean
    }
  ]

Untuk menghindari perilaku itu, anda harus mengubah parameter untuk :

fields: [
    {
      name: String,
      type: {
        type: { type: String }
      },
      registrationEnabled: Boolean,
      checkinEnabled: Boolean
    }
  ]
59
0
 niels_h
niels_h
31 Oktober 2013 в 2:53
2013-10-31T14:53:41+00:00
Lebih
Sumber
Sunting
#22671813

Terima kasih untuk balasan.

Saya mencoba pendekatan pertama, tapi tidak ada yang berubah. Kemudian, saya mencoba untuk log hasil. Aku hanya dibor ke tingkat demi tingkat, sampai akhirnya aku sampai di mana data yang ditampilkan.

Setelah beberapa saat saya menemukan masalah: Ketika saya sedang mengirim respon, saya konversi ke string via .toString().

Aku tetap itu dan sekarang bekerja cemerlang. Maaf untuk alarm palsu.

 royhowie
royhowie
Jawaban edit 22 Juli 2014 в 1:43
1
0
 GoodApple
GoodApple
9 Agustus 2019 в 9:16
2019-08-09T09:16:50+00:00
Lebih
Sumber
Sunting
#22671815

Masalah yang saya butuhkan untuk memecahkan adalah untuk menyimpan kontrak yang berisi beberapa bidang (alamat, buku, num_of_days, borrower_addr, blk_data), blk_data adalah daftar transaksi (blok jumlah transaksi dan alamat). Ini pertanyaan dan jawaban yang membantu saya. Saya ingin berbagi kode seperti di bawah ini. Semoga ini bisa membantu.

  1. Definisi skema. Lihat blk_data.
var ContractSchema = new Schema(
    {
        address: {type: String, required: true, max: 100},  //contract address
        // book_id: {type: String, required: true, max: 100},  //book id in the book collection
        book: { type: Schema.ObjectId, ref: 'clc_books', required: true }, // Reference to the associated book.
        num_of_days: {type: Number, required: true, min: 1},
        borrower_addr: {type: String, required: true, max: 100},
        // status: {type: String, enum: ['available', 'Created', 'Locked', 'Inactive'], default:'Created'},

        blk_data: [{
            tx_addr: {type: String, max: 100}, // to do: change to a list
            block_number: {type: String, max: 100}, // to do: change to a list
        }]
    }
);
  1. Membuat catatan untuk koleksi di MongoDB. Lihat blk_data.
// Post submit a smart contract proposal to borrowing a specific book.
exports.ctr_contract_propose_post = [

    // Validate fields
    body('book_id', 'book_id must not be empty.').isLength({ min: 1 }).trim(),
    body('req_addr', 'req_addr must not be empty.').isLength({ min: 1 }).trim(),
    body('new_contract_addr', 'contract_addr must not be empty.').isLength({ min: 1 }).trim(),
    body('tx_addr', 'tx_addr must not be empty.').isLength({ min: 1 }).trim(),
    body('block_number', 'block_number must not be empty.').isLength({ min: 1 }).trim(),
    body('num_of_days', 'num_of_days must not be empty.').isLength({ min: 1 }).trim(),

    // Sanitize fields.
    sanitizeBody('*').escape(),
    // Process request after validation and sanitization.
    (req, res, next) => {

        // Extract the validation errors from a request.
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            // There are errors. Render form again with sanitized values/error messages.
            res.status(400).send({ errors: errors.array() });
            return;
        }

        // Create a Book object with escaped/trimmed data and old id.
        var book_fields =
            {
                _id: req.body.book_id, // This is required, or a new ID will be assigned!
                cur_contract: req.body.new_contract_addr,
                status: 'await_approval'
            };

        async.parallel({
            //call the function get book model
            books: function(callback) {
                Book.findByIdAndUpdate(req.body.book_id, book_fields, {}).exec(callback);
            },
        }, function(error, results) {
            if (error) {
                res.status(400).send({ errors: errors.array() });
                return;
            }

            if (results.books.isNew) {
                // res.render('pg_error', {
                //     title: 'Proposing a smart contract to borrow the book',
                //     c: errors.array()
                // });
                res.status(400).send({ errors: errors.array() });
                return;
            }

            var contract = new Contract(
                {
                    address: req.body.new_contract_addr,
                    book: req.body.book_id,
                    num_of_days: req.body.num_of_days,
                    borrower_addr: req.body.req_addr

                });

            var blk_data = {
                    tx_addr: req.body.tx_addr,
                    block_number: req.body.block_number
                };
            contract.blk_data.push(blk_data);

            // Data from form is valid. Save book.
            contract.save(function (err) {
                if (err) { return next(err); }
                // Successful - redirect to new book record.
                resObj = {
                    "res": contract.url
                };
                res.status(200).send(JSON.stringify(resObj));
                // res.redirect();
            });

        });

    },
];
  1. Update record. Lihat blk_data.
// Post lender accept borrow proposal.
exports.ctr_contract_propose_accept_post = [

    // Validate fields
    body('book_id', 'book_id must not be empty.').isLength({ min: 1 }).trim(),
    body('contract_id', 'book_id must not be empty.').isLength({ min: 1 }).trim(),
    body('tx_addr', 'tx_addr must not be empty.').isLength({ min: 1 }).trim(),
    body('block_number', 'block_number must not be empty.').isLength({ min: 1 }).trim(),

    // Sanitize fields.
    sanitizeBody('*').escape(),
    // Process request after validation and sanitization.
    (req, res, next) => {

        // Extract the validation errors from a request.
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            // There are errors. Render form again with sanitized values/error messages.
            res.status(400).send({ errors: errors.array() });
            return;
        }

        // Create a Book object with escaped/trimmed data
        var book_fields =
            {
                _id: req.body.book_id, // This is required, or a new ID will be assigned!
                status: 'on_loan'
            };

        // Create a contract object with escaped/trimmed data
        var contract_fields = {
            $push: {
                blk_data: {
                    tx_addr: req.body.tx_addr,
                    block_number: req.body.block_number
                }
            }
        };

        async.parallel({
            //call the function get book model
            book: function(callback) {
                Book.findByIdAndUpdate(req.body.book_id, book_fields, {}).exec(callback);
            },
            contract: function(callback) {
                Contract.findByIdAndUpdate(req.body.contract_id, contract_fields, {}).exec(callback);
            },
        }, function(error, results) {
            if (error) {
                res.status(400).send({ errors: errors.array() });
                return;
            }

            if ((results.book.isNew) || (results.contract.isNew)) {
                res.status(400).send({ errors: errors.array() });
                return;
            }

            var resObj = {
                "res": results.contract.url
            };
            res.status(200).send(JSON.stringify(resObj));
        });
    },
];
0
0
Related communities 2
Node.js Indonesia 🇮🇩
Node.js Indonesia 🇮🇩
10 754 pengguna
Indonesian NodeJs Developer Community Admin : - @khannedy - @endymuhardin Ninja JS: @julianalimin @kucingMumuBulatMeongMeongNyanCat
Buka telegram
MongoDB Indonesia 🇮🇩
MongoDB Indonesia 🇮🇩
1 762 pengguna
db.dropDatabase() don't forget to enable auth on your mongo server - https://www.mongodb.com/download-center/compass - https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 1 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
TR
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi