質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

1回答

445閲覧

mongoose node.js でソート機能を実装したい

ogajun

総合スコア15

MongoDB

MongoDBはオープンソースのドキュメント指向データベースの1つです。高性能で、多くのリトルエンディアンシステムを利用することができます。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

0クリップ

投稿2017/07/23 09:11

実現したいこと
ソート機能を実装したい
borrowedBookNumber でユーザーをソートしたい

参考にした記事
http://qiita.com/n0bisuke/items/6db3ca0bc4fb7fcbd442
https://mongodb.github.io/node-mongodb-native/markdown-docs/queries.html

スキーマは以下
models/user.js

const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ slack: { id: { type: String, required: true, }, name: { type: String, required: true, }, profileImageUrl: String, }, borrowedBookNumber: { type: Number, default: 0, }, }); module.exports = mongoose.model('User', userSchema);

route/user.js の中身

node.js

1var express = require('express'); 2var router = express.Router(); 3var User = require('../models/user.model'); 4var log4js = require('log4js'); 5var logger = log4js.getLogger(); 6 7/* GET users listing. */ 8// ユーザー一覧取得 9router.get('/', (req, res, next) => { 10 const options = { 11 sort: { borrowedBookNumber: 1 }, 12 }; 13 User.find({}, options) 14 .then((books) => { 15 res.json(books); 16 }) 17 .catch((e) => { next(e); }); 18}); 19 20module.exports = router;

GET結果

<!DOCTYPE html> <html> <head> <title></title> <link rel="stylesheet" href="/stylesheets/style.css"> </head> <body> <h1>Unsupported projection option: sort: { borrowedBookNumber: 1 }</h1> <h2></h2> <pre>MongoError: Unsupported projection option: sort: { borrowedBookNumber: 1 } at Function.MongoError.create (/Users/goods/works/bookshelf/node_modules/mongodb-core/lib/error.js:31:11) at queryCallback (/Users/goods/works/bookshelf/node_modules/mongodb-core/lib/cursor.js:212:36) at /Users/goods/works/bookshelf/node_modules/mongodb-core/lib/connection/pool.js:469:18 at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickCallback (internal/process/next_tick.js:98:9)</pre> </body> </html>

const options = {
sort: 'borrowedBookNumber',
};

に変更しても

[ {}, { "_id": "596dce7d8a688ec1687da0b3" }, { "_id": "596dd1911169096c443cef8e" }, { "_id": "596dd4919e7de26ed6314b76" }, { "_id": "596ded379e7de26ed6314b77" }, { "_id": "596ded5b9e7de26ed6314b78" }, { "_id": "597452ca5ea4f6d7170b5d43" } ]


_id のみが出てくる
肝心のborrowedBookNumberが出て来ない

どうすれば良いのでしょう?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

route/user.jsのユーザー一覧取得部分にnullを追加するといけないでしょうか?

javascript

1/* GET users listing. */ 2// ユーザー一覧取得 3router.get('/', (req, res, next) => { 4 const options = { 5 sort: { borrowedBookNumber: 1 }, 6 }; 7 User.find({}, null, options) 8 .then((books) => { 9 res.json(books); 10 }) 11 .catch((e) => { next(e); }); 12});

もし動いたなら、Mongooseの4.1.x以降のsortの書き方を見てみてください

In Mongoose, how sort by date and other field

投稿2017/07/25 13:23

kulvon

総合スコア30

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問