MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Cách tổng hợp MongoDB trong Node.js

Vấn đề có thể xảy ra ở đây là userid của bạn giá trị thực sự không phải là ObjectID chính xác gõ khi nó đang được chuyển vào đường ống. Điều này dẫn đến không có gì được "khớp" trong giai đoạn đầu.

Do đó, là một ví dụ đầy đủ hơn:

var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var ObjectID = require("mongodb").ObjectID;

mongoose.connect("mongodb://localhost/test");

friendSchema = new Schema({
  "name": String,
  "status": Number
});

memberSchema = new Schema({
  friends: [friendSchema]
});

var Member = mongoose.model("Members", memberSchema );

var userid = new ObjectID("537ec520e98bcb378e811d54");

console.log( userid );

Member.aggregate([
  { "$match": { "_id": userid } },
  { "$unwind": "$friends" },
  { "$match": { "friends.status": 0 } }],
  function( err, data ) {

    if ( err )
      throw err;

    console.log( JSON.stringify( data, undefined, 2 ) );

  }
);

Sau đó, dữ liệu nào sẽ khớp với dữ liệu như mong đợi:

[
  {
    "_id": "537ec520e98bcb378e811d54",
    "friends": [{
      "name": "Ted",
      "status": 0
    }]
  }
]

Vì vậy, hãy cẩn thận để đảm bảo đây là loại chính xác. Phương thức tổng hợp không tự động bao bọc một giá trị chuỗi chẳng hạn như "537ec520e98bcb378e811d54" vào một ObjectID nhập khi nó được đề cập trong giai đoạn đường ống đối với _id theo cách mà Mongoose thực hiện việc này với các phương pháp tìm và cập nhật khác.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. cập nhật truy vấn mongodb chọn các trường lồng nhau

  2. Nhận các giá trị dưới dạng mảng các phần tử sau khi $ tra cứu

  3. Tại sao sử dụng $ all trong mongodb lại chậm hơn nhiều?

  4. Cách loại trừ _id mà không bao gồm các trường khác bằng cách sử dụng khung tổng hợp

  5. MongoDB $ mergeObjects