MongoDB - Suche alle Dokumente, bei denen eine Array/Liste größer als N ist

MongoDB - findet alle Dokumente, bei denen eine Array- / Listengröße größer als N ist

Überprüfen Sie folgende Dokumente:

Sammlung: Domäne

{
    "_id" : 1001,
    "domainName" : "google.com"
    "tag" : [
        "search engine",
        "search",
        "find anything",
        "giant"
        ]
},
{
    "_id" : 1002,
    "domainName" : "yahoo.com"
    "tag" : [
        "search engine",
        "online portal",
        ]
},
{
    "_id" : 1003,
    "domainName" : "example.com"
}

1. Frage

Wie finde ich alle Dokumente, bei denen das Tag größer als 3 ist?

# 1.1 Versuchen Sie,$size und$gtwie folgt zu kombinieren:

db.domain.find( { tag: {$size: {$gt:3} } } );
null

Kein Fehler, aber es wird immer eine Null zurückgegeben, anscheinend funktioniert MongoDB nicht so.

# 1.2 Versuchen Sie, den Operator$wherezu verwenden.

db.domain.find( {$where:'this.tag.length>3'} )

MongoDB v 2.2.3
uncaught exception: error {
    "$err" : "error on invocation of $where function:\nJS Error: TypeError: this.tag has no properties nofile_a:0",
    "code" : 10071
}

or

MongoDB v 2.4.5
JavaScript execution failed: error: {
        "$err" : "JavaScript execution failed: TypeError: Cannot read property 'length' of undefined
 near '' ",
        "code" : 16722
} at src/mongo/shell/query.js:L128
>

Sehen Sie so aus, als ob der Operator$wherenicht so gut funktioniert?

2. Lösung

Tatsächlich funktioniert der Operator$whereeinwandfrei, nur nicht alle Dokumente enthalten das Feld "Tag" und haben den Fehler "Keine Eigenschaften" verursacht.

2.1 To fix it, try combine $exists and $where together :

db.domain.find( {tag : {$exists:true}, $where:'this.tag.length>3'} )

{
    "_id" : 1001,
    "domainName" : "google.com"
    "tag" : [
        "search engine",
        "search",
        "find anything",
        "giant"
        ]
}