sql >> Database >  >> NoSQL >> MongoDB

Mongoid Query DB op virtueel kenmerk

U kunt dit doen in mongoDB met behulp van Aggregation Framework (nieuw in versie 2.2).

U moet de reeks gebruikersgemeenschappen beschikbaar hebben. In dit voorbeeld noem ik het userComms - ik verwacht dat het een array is met hetzelfde type waarden als posts.communities.

db.posts.aggregate( [
    {
        "$unwind" : "$communities"
    },
    {
        "$match" : {
            "communities" : {
                "$in" : userComms
            }
        }
    },
    {
        "$group" : {
            "_id" : "$_id",
            "relevance" : {
                "$sum" : 1
            }
        }
    },
    {
        "$sort" : {
            "relevance" : -1
        }
    }
]);

Dit retourneert een document van het formulier:

{
    "result" : [
        {
            "_id" : 1,
            "relevance" : 4
        },
        {
            "_id" : 6,
            "relevance" : 3
        },
...
        ]
}

De resultatenarray bevat _id's van berichten en is relevant zoals berekend door het aantal community's toe te voegen dat ze gemeen hadden met de gebruiker. Dan wordt het gesorteerd (aflopend) op die som.




  1. Hoe vergelijk ik data van Twitter-gegevens die zijn opgeslagen in MongoDB via PyMongo?

  2. Topologie is vernietigd bij gebruik van MongoDB met native driver en Express.js

  3. Zoek naar documenten met een intern subveld van een bepaalde waarde

  4. Veld van array-element toevoegen in MongoDB-aggregatie