コンパイラかく語りき

import { Fun } from 'programming'

【Mongoose】空配列を持ったドキュメントを取得する

Mongoose のドキュメント取得に関して。空配列を持ったドキュメントを取得する方法。

例えば、以下のようなデータから id: 2 のデータのみ取得する。

{
    id: 1,
    items: ['foo']
}
{
    id: 2,
    items: []
}

これらのデータを Data スキーマとすると、以下のように取得できる。

import mongoose from '../libs/mongoose'

const { Schema } = mongoose

// スキーマ
const DataSchema = new Schema({
    id: Number,
    items: [String],
})

const Data = mongoose.model('Data', DataSchema)

const data = await Data.find({ 'items.0': { $exists: false } })

items.0 が配列の最初の要素を表す。 { $exists: false } が存在していないかどうかチェックする。

なので、最初の要素が存在していなければ という条件になる。これがつまり、空配列かどうかというチェックになる。

参考: Mongoose find all documents where array.length is greater than 0 & sort the data - stackoverflow.com