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

`$ eq`演算子は配列ドット表記で機能しますか?

    いいえ。$nodes.0 $eq aggregation operatorの正しい式ではありません 、配列フィールドで使用する場合。

    $eq aggregation operator 次のsnytaxがあります:

    { $eq: [ <expression1>, <expression2> ] }
    
    

    $reduceを使用する必要があります $arrayElemAtと一緒に $ eq演算子でフィールドにアクセスするには:

    クエリ1

    db.relations.find({
      $expr: {
        $eq: [
          {
            $reduce: {
              input: [
                {
                  $arrayElemAt: [
                    "$nodes",
                    0
                  ]
                }
              ],
              initialValue: false,
              in: {
                "$and": [
                  {
                    $eq: [
                      "$$this.type",
                      "User"
                    ]
                  },
                  {
                    $eq: [
                      "$$this.id",
                      UUID("dc20f7c7-bd45-4fc1-9eb4-3604428fa551")
                    ]
                  }
                ]
              }
            }
          },
          true
        ]
      }
    })
    

    遊び場

    別の方法として、$eq演算子{ <field>: { $eq: <value> } }を使用します

    クエリ2

    db.relations.find({
      "$and": [
        {
          "nodes.0.type": {
            $eq: "User"
          }
        },
        {
          "nodes.0.id": {
            $eq: UUID("dc20f7c7-bd45-4fc1-9eb4-3604428fa551")
          }
        }
      ]
    })
    

    MongoDBプレイグラウンド

    IXSCANを実行する場合は、 Query2を使用できます。 。次のインデックスを作成する必要があります:

    db.relations.ensureIndex({"nodes.0.id":1})
    db.relations.ensureIndex({"nodes.0.type":1})
    



    1. コレクション全体のintに文字を含む文字列を変換するにはどうすればよいですか?

    2. Mongodb、$lookupを使用した集計クエリ

    3. このように使用してもMongodbが更新されない

    4. スタック/失効したResqueワーカーをクリアするにはどうすればよいですか?