web-dev-qa-db-ja.com

SequelizeJSでDESCの注文レコードが機能しないプロパティ

私のアプリケーションには、さまざまなタイプの製品を含むProductsテーブルがあります。各レコードには列呼び出しupdateDetailsがあり、以下の属性を持つJSONオブジェクトです。

const updateDetails = { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2}

ただし、Productsテーブルの一部のレコードupdateDetailsnullであり、ユーザーがレコードを編集した後に更新されます。

私のサンプルDBレコードは以下のとおりです。

[
 { 
  name: 'Product 1', 
  type: 'a', 
  updateDetails: { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2 }
 },
 { 
  name: 'Product 2', 
  type: 'a', 
  updateDetails: null
 },
 { 
  name: 'Product 3', 
  type: 'a', 
  updateDetails: { time: '2020-05-27T05:53:31.540Z', userId: 1, officeId: 2 }
 },
 { 
  name: 'Product 4', 
  type: 'a', 
  updateDetails: null
 },
 { 
  name: 'Product 5', 
  type: 'a', 
  updateDetails: { time: '2020-05-20T05:53:31.540Z', userId: 1, officeId: 2 }
 }
]

私がやりたかったのは、updateDetails.time desc順序でソートして製品を取得する必要があり、結果の最後にupdateDetails = nullを含むレコードが必要です。以下のような期待される結果。

[
  { 
    name: 'Product 1', 
    type: 'a', 
    updateDetails: { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2 }
  },
  { 
    name: 'Product 3', 
    type: 'a', 
    updateDetails: { time: '2020-05-27T05:53:31.540Z', userId: 1, officeId: 2 }
  },
  { 
    name: 'Product 5', 
    type: 'a', 
    updateDetails: { time: '2020-05-20T05:53:31.540Z', userId: 1, officeId: 2 }
  },
  { 
    name: 'Product 2', 
    type: 'a', 
    updateDetails: null
  },
  { 
    name: 'Product 4', 
    type: 'a', 
    updateDetails: null
  }
]

以下のクエリを使用しましたが、成功しませんでした。

const results = await Product.findAll({
      { where: { type: 'a' } },
      limit: 10,
      order: [['updateDetails.time', 'DESC']]
    })

しかし、それは私の望ましい結果を与えることができませんでした。前もって感謝します。

8

まあ、何もうまくいかない場合は、常にこれをプレーンJavaScriptでソートするオプションがあります:)

var data =[
 { 
  name: 'Product 1', 
  type: 'a', 
  updateDetails: { time: '2020-05-28T05:53:31.540Z', userId: 1, officeId: 2 }
 },
 { 
  name: 'Product 2', 
  type: 'a', 
  updateDetails: null
 },
 { 
  name: 'Product 3', 
  type: 'a', 
  updateDetails: { time: '2020-05-27T05:53:31.540Z', userId: 1, officeId: 2 }
 },
 { 
  name: 'Product 4', 
  type: 'a', 
  updateDetails: null
 },
 { 
  name: 'Product 5', 
  type: 'a', 
  updateDetails: { time: '2020-05-20T05:53:31.540Z', userId: 1, officeId: 2 }
 }
]
data.sort((a,b)=>{
  if(a.updateDetails && !b.updateDetails){
    return -1
  }
  return a.name - b.name;

});

console.log(data)
0
ABGR