Tạo chuỗi JSON đa cấp cha thế nào



  • Bình thường mình tạo chuỗi JSON như thế này:

    var query = {};
    query.demo = 1;
    

    thường thì như vậy, nhưng bây giờ mình có tới 2 cấp thì làm sao. Ví dụ như: query.demo.complete = 2. Cái này nó tới 2 cái chấm.

    Nhân tiện cho mình hỏi là làm sao để gõ code trong nodejs.vn nhỉ, mình ko thấy format code đâu cả, chỉ thấy mấy cái đơn giản nên mấy cái code hơi khó nhìn


  • Global Moderator

    Format đẹp rồi nhé bạn !

    Như cách bạn đang sử dụng gọi là khai báo Object Literal. Đây là một mẫu khai báo nhanh đối tượng trong JavaScript. Bạn cũng nên phân biệt đối tượng javascript với kiểu dữ liệu JSON nhé

    Bạn có thể khai báo đa cấp như thế này.

    var query = { };
    query.demo = 1;
    query.demo2 = { };
    query.demo2.complete = 2;
    
    // Test
    console.log(query.demo2.complete);
    

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    1


  • var query = {};
    query.demo = {};
    query.demo.complete = 2;
    
    var query = {
      demo: {
        complete: 2
      }
    };
    

    2 cáhch như trên



  • Cám ơn 2 bác đã giải đáp nhiệt tình cho mình. Nhưng vấn đề thực sự nó thế này ạ, mình lưu data theo dạng embed như sau:
    {
    "_id" : ObjectId("57cf6bb5ff8ace35f8823ef2"),
    "name": "name",
    "data" : [
    {
    "name" : "foo",
    "price" : NumberInt(1)
    }
    ]
    }
    lúc mình tìm trên code thì mình tạo ra 1 chuỗi JSON, sau đó đưa vào trong lệnh find. Cụ thể như sau:
    var query = {}
    if(req.query.name != undefined)
    {
    query.name = req.query.name;
    }
    if(req.query.data != undefined)
    {
    query.data.name = req.query.data;
    }

    Person.find(query, {}, function (err, person) {
    // bla bla.....
    })

    Vấn đề nó nằm ở query.data.name, nó không cho phép làm vậy, nếu như query.name thì được, nhờ các bác tư vấn cho mình cái



  • "data" : [
    {
    "name" : "foo",
    "price" : NumberInt(1)
    }
    ]
    Do là "name" nằm trong cặp ngoặc vuông trước nên là nó tính là "name" nằm trong array, bạn thử query.data[0].name xem



  • để lát về mình thử xem, mà sao nơi post bài ở 4rum mình không có nơi cho gõ code ta, hay chỉ có mod với admin mới tạo code được, nhiều khi đọc mỏi cả mắt


  • Global Moderator

    Tech-nông
    Twitter: @nhubaovu
    Profile: about.me/vunb

    0


  • mình tìm ra được cách làm rồi. làm vậy:

    var query = {}
    if(req.query.name != undefined)
    {
    query.name = req.query.name;
    }
    if(req.query.data != undefined)
    {
    query["data.name"] = req.query.data;
    }

    Person.find(query, {}, function (err, person) {
    // bla bla.....
    })

    Lúc truy vấn có embed document thì phải dùng tới cái này: query["data.name"]


Log in to reply