次のように、Mongooseを使用してすべてのユーザーのリストを送信しようとしました。
server.get('/usersList', function(req, res) {
var users = {};
User.find({}, function (err, user) {
users[user._id] = user;
});
res.send(users);
});
もちろん、res.send(users);
は{}
を送信しますが、これは私が望むものではありません。セマンティクスがわずかに異なるfind
の代替手段はありますか?
server.get('/usersList', function(req, res) {
User.find({}, function (err, users) {
res.send(users);
});
});
基本的に、すべてのユーザーがデータベースから取得されたときにのみコールバックが実行されるようにします。
さて、本当に_id
からuser
へのマッピングを返したい場合、いつでもできます:
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
var userMap = {};
users.forEach(function(user) {
userMap[user._id] = user;
});
res.send(userMap);
});
});
find()
は、一致するすべてのドキュメントを配列で返します。そのため、最後のコードは、その配列をクライアントに送信します。
データをビューに送信する場合は、次を渡します。
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.render('/usersList', {users: users});
});
});
ビュー内で、変数ユーザーを使用してデータをループできます。
これは、@ soulcheckの答えの改善であり、forEachのタイプミスの修正(閉じ括弧がない)です。
server.get('/usersList', (req, res) =>
User.find({}, (err, users) =>
res.send(users.reduce((userMap, item) => {
userMap[item.id] = item
return userMap
}, {}));
);
);
乾杯!
データをリストする非常に簡単な方法がありました:
server.get('/userlist' , function (req , res) {
User.find({}).then(function (users) {
res.send(users);
});
});
非同期待機および矢印機能でも同じことができます
server.get('/usersList', async (req, res) => {
const users = await User.find({});
const userMap = {};
users.forEach((user) => {
userMap[user._id] = user;
});
res.send(userMap);
});
update
またはdelete
の後にlist all documents in Mongoose collection
が必要な場合
関数を次のように編集できます。
exports.product_update = function (req, res, next) {
Product.findByIdAndUpdate(req.params.id, {$set: req.body}, function (err, product) {
if (err) return next(err);
Product.find({}).then(function (products) {
res.send(products);
});
//res.send('Product udpated.');
});
};
これにより、成功するとlist all documents
だけでなくshowing success message
になります