0

In meiner Sammlung posts Ich habe Dokumente wie diese

[{ 
    _id : ObjectId("post-object-id"), 
    title : 'Post #1', 
    category_id : ObjectId("category-object-id") 

}] 

Ich brauche ein paar Abfragen zu machen, wo ich das eine Reihe von Stellen auf der Grundlage ihrer category_id (mehrere ids sein kann) aber einige von ihnen ausschließen.

Ich habe mit der Abfrage versucht (in der Schale):

db.posts.find({$and: [ 
    {_id: { $nin : ['ObjectId("post-object-id")']}}, 
    {category_id : { $in : ['ObjectId("category-object-id")']}} 
]}) 

I 0 zurück, wenn count().

Wenn ich jedoch das category_id Attribut ändern und entfernen Sie die $ in und umfassen nur eine ID es Arbeit, wie folgt aus:

db.posts.find({$and: [ 
    {_id: { $nin : ['ObjectId("58a1af81613119002d42ef06")']}}, 
    {category_id : ObjectId("58761634bfb31efd5ce6e88d")} 
]}) 

aber diese Lösung mich nur ermöglicht durch eine Kategorie zu finden.

Wie hätte ich das Kombinieren von $ in und $ nin mit objectId auf dieselbe Weise wie oben beschrieben?

Antwort

2

Dies funktioniert, entfernen Sie einfach einfache Anführungszeichen um ObjectId

db.posts.find({$and: [ 
    {_id: { $nin : [ObjectId("post-object-id")]}}, 
    {category_id : { $in : [ObjectId("category-object-id")]}} 
]}) 

Sie nicht einfache Anführungszeichen um ObjectId setzen sollte, ist es ihnen reiht

+0

Dank einem Haufen machen. Ich könnte schwören, dass ich das schon versucht habe, ohne die Zitate um ObjectId, ohne Glück, aber anscheinend habe ich es nicht richtig gemacht. Jetzt funktioniert es :-) – Mestika

+2

Wenn es für Sie funktioniert, wählen Sie es bitte als richtige Antwort :) –

Verwandte Themen