sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDb $addFields og $match

Næste gang skal du tilføje et eksempel på dit dokument, så folk kan gengive dit problem. Når det er sagt, kan jeg ikke se, hvor dit problem er. Jeg oprettede nogle data for at gengive din usecase. Så jeg tilføjede følgende dokument:

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

Så udførte jeg dit script (uden sorteringen), og det fungerer fint:

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"
        }
    }
])

At du ikke får nogen resultater, skyldes sandsynligvis dine anmodningsparametre. Udover hvordan kan "projectName" har de samme søgeparametre som din "document.id" Matcher de overhovedet? Tjek din matchpipeline igen:

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



  1. Microsoft.Extensions.Caching.Redis vælg en anden database end db0

  2. Sådan forbindes nodeJS docker-container til mongoDB

  3. Lyt til genforbindelseshændelser i MongoDB-driveren

  4. Sådan koder du med Spring-data MongoDB til db.test.update({name:'abc'}, {$pull:{'child':{'age':10}}})