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

Mongoでスライスのスライスを取得することは可能ですか?

    $sliceを実現するには、集計パイプラインを使用する必要があります 検索クエリの一部であるプロジェクトステートメントの制限により、チェーン。

    以下のクエリは、最初の$sliceのため、無効です。 インデックスの代わりに配列を返し、外部スコープの$sliceを実行します。 失敗します。

    db.collection.find({"name":"foo"},{text: {$slice:[{$slice: [1,1]}]}})
    

    さらに、同じプロジェクトステートメントで投影されたフィールドを操作する方法はありません。可能であれば、$sliceを適用してテキストをさらに変更することもできます。

    行く方法は次のようになります:

    • Match 名前がfooのレコード。
    • Unwind 最初のレベルに到達するためのテキスト配列。
    • Unwind 再び私たちが望むレベルに到達するために。
    • Group レコードを名前でまとめます。
    • Project グループ内の最後のレコードであり、最後にネストされた配列の最後の要素でもあります。

    コード:

    db.collection.aggregate([
    {$match:{"name":"foo"}},
    {$unwind:"$text"},
    {$unwind:"$text"},
    {$group:{"_id":"$name","text":{$last:"$text"}}},
    {$project:{"name":"$_id","text":1}}
    ])
    

    または、特定の順序で表示される要素を投影する場合は、$skipを使用できます。 および$limit これを達成するための操作。

    var orderOfElement = 2;
    db.collection.aggregate([
    {$match:{"name":"foo"}},
    {$unwind:"$text"},
    {$unwind:"$text"},
    {$skip:orderOfElement -1},
    {$limit:1}
    ])
    

    ネストされた配列で2番目の要素を順番に投影します。



    1. MongoDBで辞書の配列をクエリするにはどうすればよいですか?

    2. MongoDBのフィールドの実際のタイプを返します

    3. 配列の最後の要素を使用してコレクションを並べ替える方法

    4. find({})で配列の共通部分を処理するにはどうすればよいですか?