mongodb 模型以外的集合的环回远程方法中的自定义 CRUD
custom CRUD in loopback remote-method for collection other than model for mongodb
我正在为我的项目使用 Loopback。我为测试模型创建了一个模型 'test' 和一个远程方法 'createOrder'。
'use strict';
module.exports = function (Test) {
/**
*
* @param {number} amount
* @param {Function(Error)} callback
*/
Test.createOrder = function (amount, callback) {
// Add log to the logs collection
callback(null);
};
};
我正在使用 MongoDB 作为数据源。
{
"db": {
"name": "db",
"connector": "memory"
},
"paymentDS": {
"host": "localhost",
"port": 27017,
"url": "",
"database": "test",
"password": "",
"name": "testDS",
"user": "",
"useNewUrlParser": true,
"connector": "mongodb"
}
}
我想从测试模型中定义的 createOrder 远程方法将日志插入到日志集合中。
我该怎么做?
如果您的日志集合有模型,您可以:
Test.createOrder = function(amount, callback) {
// ...
Test.app.models.Log.create(/*...*/)
// ...
};
否则,您可以直接从数据库连接器访问日志收集:
Test.createOrder = function(amount, callback) {
// ...
Test.app.datasources.db.collection("logs").insert(/**/);
// ...
};
为了创建自定义 CRUD 操作,您可以使用环回远程方法实现。 loopback 中的每个模型都继承了 Persistent class,您可以使用其默认方法从远程方法执行 CRUD 操作。检查下面的示例,
创建操作
下面的示例将在 MongoDB 中创建一个文档,并在日志集合中插入一条记录。
Test.createOrder = function (amount, callback) {
// Inserting object into database
Test.create({amount: amount, /*data to insert*/}, function(err, data) {
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "order created", /*data to insert*/}, function(err, data) {
callback(null);
});
});
};
持久模型中有更多方便的方法可用于在不同情况下执行创建操作,如upsert
、findOrCreate
、save
等
读取操作
下面的示例将根据应用的过滤器从 MongoDB 中检索多个文档,并在日志集合中插入一条记录。
Test.findOrders = function (amount, callback) {
// Finding objects from database
Test.find(/** filters - Optional **/ { where: {}, limit: 10, fields: [], include: [], order: "", skip : 1}, function(err, data) {
console.log(data);
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "orders finded", /*data to insert*/}, function(err, logData) {
callback(data);
});
});
};
这里的过滤器是完全可选的。 where
用于指定where条件,可以使用它的sub-filters(如gt
、lt
、nin
等)得到更多的condition-specific 记录。 fields
可用于 select 集合中的特定列,include
可用于根据关系连接不同的集合。其余的过滤器可以从它们的名字中理解。有关过滤器的更多信息,您可以查看link提到的here。
持久化模型中也有很多有用的方法,可用于在不同情况下执行读取操作,如find
、findOne
等
更新操作
下面的示例将更新 MongoDB 中的文档,并在日志集合中插入一条记录。
Test.updateOrder = function (amount, callback) {
// Updating object into database
Test.updateAttribute(/* where filter */{id: 1}, {amount: 10, /*data to update*/}, function(err, data) {
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "order updated", /*data to insert*/}, function(err, data) {
callback(null);
});
});
};
您可以对where
过滤器的每个子过滤器执行更新操作。同样,持久模型中有许多方便的方法可用,可用于多种不同的场景(如 updateAttribute
、updateAttributes
、createUpdates
、bulkUpdate
等)。
删除操作
下面的示例将从 MongoDB 中删除一个文档,并在日志集合中插入一条记录。
Test.deleteOrder = function (amount, callback) {
// Deleting object from database
Test.destroyById(123, function(err, data) {
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "order deleted", /*data to insert*/}, function(err, logData) {
callback(data);
});
});
};
Persistent Model还包含了不同类型的方法来根据不同的场景(如destroyAll
、destroyById
)执行删除操作。
关于 CRUD
操作的官方文档
您还可以从 below-mentioned URL 找到有关 loopback 中 CRUD 操作的完整文档:
下面link包含持久模型的所有可用方法,可用于应用多个 BL,
上述link.
也有几种方法可用于执行批量操作
日志记录
已经有几个可用的扩展,可以很容易地与环回连接以执行日志记录操作,下面列出了其中的一些:
- loopback-component-logger (link),
这对于在控制台或数据库中记录操作很有用。
我正在为我的项目使用 Loopback。我为测试模型创建了一个模型 'test' 和一个远程方法 'createOrder'。
'use strict';
module.exports = function (Test) {
/**
*
* @param {number} amount
* @param {Function(Error)} callback
*/
Test.createOrder = function (amount, callback) {
// Add log to the logs collection
callback(null);
};
};
我正在使用 MongoDB 作为数据源。
{
"db": {
"name": "db",
"connector": "memory"
},
"paymentDS": {
"host": "localhost",
"port": 27017,
"url": "",
"database": "test",
"password": "",
"name": "testDS",
"user": "",
"useNewUrlParser": true,
"connector": "mongodb"
}
}
我想从测试模型中定义的 createOrder 远程方法将日志插入到日志集合中。 我该怎么做?
如果您的日志集合有模型,您可以:
Test.createOrder = function(amount, callback) {
// ...
Test.app.models.Log.create(/*...*/)
// ...
};
否则,您可以直接从数据库连接器访问日志收集:
Test.createOrder = function(amount, callback) {
// ...
Test.app.datasources.db.collection("logs").insert(/**/);
// ...
};
为了创建自定义 CRUD 操作,您可以使用环回远程方法实现。 loopback 中的每个模型都继承了 Persistent class,您可以使用其默认方法从远程方法执行 CRUD 操作。检查下面的示例,
创建操作
下面的示例将在 MongoDB 中创建一个文档,并在日志集合中插入一条记录。
Test.createOrder = function (amount, callback) {
// Inserting object into database
Test.create({amount: amount, /*data to insert*/}, function(err, data) {
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "order created", /*data to insert*/}, function(err, data) {
callback(null);
});
});
};
持久模型中有更多方便的方法可用于在不同情况下执行创建操作,如upsert
、findOrCreate
、save
等
读取操作
下面的示例将根据应用的过滤器从 MongoDB 中检索多个文档,并在日志集合中插入一条记录。
Test.findOrders = function (amount, callback) {
// Finding objects from database
Test.find(/** filters - Optional **/ { where: {}, limit: 10, fields: [], include: [], order: "", skip : 1}, function(err, data) {
console.log(data);
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "orders finded", /*data to insert*/}, function(err, logData) {
callback(data);
});
});
};
这里的过滤器是完全可选的。 where
用于指定where条件,可以使用它的sub-filters(如gt
、lt
、nin
等)得到更多的condition-specific 记录。 fields
可用于 select 集合中的特定列,include
可用于根据关系连接不同的集合。其余的过滤器可以从它们的名字中理解。有关过滤器的更多信息,您可以查看link提到的here。
持久化模型中也有很多有用的方法,可用于在不同情况下执行读取操作,如find
、findOne
等
更新操作
下面的示例将更新 MongoDB 中的文档,并在日志集合中插入一条记录。
Test.updateOrder = function (amount, callback) {
// Updating object into database
Test.updateAttribute(/* where filter */{id: 1}, {amount: 10, /*data to update*/}, function(err, data) {
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "order updated", /*data to insert*/}, function(err, data) {
callback(null);
});
});
};
您可以对where
过滤器的每个子过滤器执行更新操作。同样,持久模型中有许多方便的方法可用,可用于多种不同的场景(如 updateAttribute
、updateAttributes
、createUpdates
、bulkUpdate
等)。
删除操作
下面的示例将从 MongoDB 中删除一个文档,并在日志集合中插入一条记录。
Test.deleteOrder = function (amount, callback) {
// Deleting object from database
Test.destroyById(123, function(err, data) {
// Adding logs to the logs collection
Test.app.models.Log.insert({ message: "order deleted", /*data to insert*/}, function(err, logData) {
callback(data);
});
});
};
Persistent Model还包含了不同类型的方法来根据不同的场景(如destroyAll
、destroyById
)执行删除操作。
关于 CRUD
操作的官方文档
您还可以从 below-mentioned URL 找到有关 loopback 中 CRUD 操作的完整文档:
下面link包含持久模型的所有可用方法,可用于应用多个 BL,
上述link.
也有几种方法可用于执行批量操作日志记录
已经有几个可用的扩展,可以很容易地与环回连接以执行日志记录操作,下面列出了其中的一些:
- loopback-component-logger (link),
这对于在控制台或数据库中记录操作很有用。