sql >> データベース >  >> NoSQL >> MongoDB

MongoDB配列を$typeと一致させますか?

    実際には、 $typeのドキュメントに「落とし穴」がリストされています。 特にアレイについて:

    配列に適用すると、$typeは指定されたタイプの内部要素と一致します。射影がない場合、これは、いずれかの要素が適切なタイプである場合、配列全体が一致することを意味します。投影を使用すると、結果には要求されたタイプの要素のみが含まれます。

    つまり、「要素自体」が配列内にあるかどうかを検出するのではなく、実際にテストされているのは配列の「内部要素」であり、それがどのタイプであるかを確認します。

    現在、ドキュメント自体は、 $whereを使用したこのJavaScriptテストを提案しています。

    .find({ "$where": "return Array.isArray(this.author)" })
    

    しかし、もっと良い方法があるので、それはかなり恐ろしいことだと思います。

    秘訣は、0を要求する「ドット表記」にあります。 配列の要素を$existsにインデックス付けします

    .find({ "author.0": { "$exists": true } })
    

    これは、「0番目」の要素が存在する場合、フィールドが存在するため、データが配列であるという基本的なケースです。

    その論理的な前提を理解したら、それは非常に簡単なテストです。それと一致できない唯一のものは「真に空の」配列です。その場合、必要に応じてJavaScriptの代替にフォールバックできます。ただし、これは実際にはインデックスを使用できるため、後者の形式を使用することをお勧めします。



    1. MongoDBAtlasのトップ10の機能

    2. nginx luarediscookieが設定されていません

    3. 合計数を取得するためにMongoDBで合計を集計するにはどうすればよいですか?

    4. LuaSocket、Lua 5.2、Redis