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

sailsjs sử dụng mongodb mà không có ORM

npm i mongodb bởi vì bạn sẽ cần bọc bất kỳ ID nào bằng new ObjectID(idStr) .

Sau đó, bạn có thể làm điều này:

const collection = Pet.getDatastore().manager.collection(Pet.tableName);
const res = await collection.find({ name: { $regex: /blue/ } });
const dataWithObjectIds = await res.toArray();
const dataWithIds = JSON.parse(JSON.stringify(rawDataArr).replace(/"_id"/g, '"id"'));

Tôi đã tạo một chức năng trợ giúp để thực hiện tất cả những điều này cho chúng tôi:

/**
 * Use by chaining as if you were acting on a collection. So can use .find .aggregate etc.
 * Returns json searializable data.
 *
 * @param {class} model A model
 * @param {number} cnt - Number of chains on this, so I know when it reached the end
 */
function nativeMongoQuery(model, cnt) {

  const collection = model.getDatastore().manager.collection(model.tableName);

  let callCnt = 0;

  let req;

  const proxy = new Proxy({}, {
    get: (_, method) => (...args) => {

      if (!req) req = collection[method](...args);
      else req = req[method](...args);

      callCnt++;

      if (callCnt === cnt) {
        return (async function() {
          const rawDataArr = await req.toArray();
          return JSON.parse(JSON.stringify(rawDataArr).replace(/"_id"/g, '"id"'));
        })();
      } else {
        return proxy;
      }
    }
  });

  return proxy;

}

module.exports = nativeMongoQuery;

Tôi không thích phân tích cú pháp JSON và chuỗi ký tự và thay thế toàn cầu. Nhưng nếu tôi không thực hiện stringify, thì tất cả mongo _id đều là ObjectId s.

Sử dụng nó như thế này:

const { ObjectId } = require('mongodb');

function makeObjectId(id) {
   return new ObjectId(id);
}

const ownerIds = ['5349b4ddd2781d08c09890f4', '5349b4ddd2781d08c09890f5']
const ownerObjectIds = ownerIds.map(makeObjectId);
await nativeMongoQuery(Pet, 2).find({ owner: { $in: ownerObjectIds } }).sort({ dueAt: 1 });

Đây là một ví dụ khác:

const mostRecentlyCreatedPets = await nativeMongoQuery(Pet, 1).aggregate([
  { $match: { owner: { $in: ownerObjectIds } } },
  { $sort: { createdAt: -1 } },
  { $limit: 1 }
]);

cnt đối số cho bạn biết bạn đã xâu chuỗi bao nhiêu điều từ đó.



  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. Làm cách nào để trích xuất dấu thời gian từ MongoDB ObjectId trong Spring Data MongoDB?

  3. MongoDB $ và truy vấn toán tử trong PHP

  4. MongoDB:Tìm các giá trị trường đã cho của tài liệu trong một đối tượng có khóa không xác định

  5. MongoDb:mapReduce ra kết quả thu thập