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

MongoDb$addFieldsと$match

    次回は、ドキュメントのサンプルを追加して、他の人があなたの問題を再現できるようにしてください。あなたの問題がどこにあるのかわかりません。ユースケースを再現するためにいくつかのデータを作成しました。そこで、次のドキュメントを追加しました:

    { 
        "_id" : ObjectId("5a0d5d376c9b762a7c035ec4"), 
        "projectName" : "some stack test", 
        "price" : NumberInt(45), 
        "propertyId" : {
            "prefix" : "a", 
            "number" : "7"
        }
    }
    

    次に、スクリプトを(並べ替えなしで)実行しましたが、正常に機能します:

    db.yourCollectionName.aggregate([
        {
            $project: {
                "projectName": 1,
                "price": 1,
                "document": '$$ROOT'
            }
        },
        {
            $addFields: {
                "document.id": {
                    $concat: ['$document.propertyId.prefix', '$document.propertyId.number']
                }
            }
        },
        {
            $match: {
                $and: [{
                    $or: [{
                            "projectName": {
                                $regex: '.*' + "some stack test"
                            }
                        },
    
                        {
                            "document.id": {
                                $regex: '.*' + "a" + '.*',
                                $options: "7"
                            }
                        }
                    ]
                }]
    
            }
        },
        {
            $replaceRoot: {
                newRoot: "$document"
            }
        }
    ])
    

    結果が得られないという事実は、おそらくリクエストパラメータが原因です。 "projectName"はどのようにできますか "document.id"と同じ検索パラメータを使用する それらは一致していますか?一致パイプラインをもう一度確認してください:

    {"projectName": {$regex: '.*' + req.query.search + '.*', $options: "i"}},       
    {'document.id': {$regex: '.*' + req.query.search + '.*', $options: "i"}}
    



    1. パイプされたファイルストリームの出力は何ですか?

    2. MongoDBの利点| MongoDBのデメリット

    3. RedisデータベースTTL

    4. Tornado / Motorでの集約の失敗:不明なオブジェクトMotorAggregationCursorが生成されました