sql >> Database >  >> NoSQL >> MongoDB

Wat gebeurt er als afwikkelen wordt toegepast op een veld dat niet aanwezig is tijdens het gebruik van aggregatie in mangoest?

Nee, dat niet:

Hier is een eenvoudig voorbeeld:

> db.test.insert({a:[1]})
> db.test.insert({})

> db.test.aggregate({$unwind:'$a'})
{ "_id" : ObjectId("557362a17b97d77c38793c21"), "a" : 1 }
// no error -- but unwind only the document having the `a` field.

Maar:

> db.test.insert({a:2})
> db.test.aggregate({$unwind:'$a'})
// will result in error 15978:
// """Value at end of $unwind field path '$a' must be an Array,
//    but is a NumberDouble"""

Volgens uw bewerking, als u documenten wilt bewaren met een ontbrekende veld om te ontspannen, kunt u $project een standaardwaarde met behulp van $ifNull :

> db.test.find()
{ "_id" : ObjectId("557362a17b97d77c38793c21"), "a" : [ 1 ] }
{ "_id" : ObjectId("557362a57b97d77c38793c22") }

> db.test.aggregate([
    {$project: { a: { $ifNull: ['$a', [ null ]]}}},
    {$unwind: "$a"}
])
{ "_id" : ObjectId("557362a17b97d77c38793c21"), "a" : 1 }
{ "_id" : ObjectId("557362a57b97d77c38793c22"), "a" : null }



  1. Kan vergrendelingsbestand niet maken/openen:/data/mongod.lock errno:13 Toestemming geweigerd

  2. Kan Assembly- of Windows-metadatabestand 'System.Data.dll' niet oplossen

  3. Voeg meerdere waarden toe met de $addToSet Mongo-operator

  4. Een JSON-bestand opslaan met GridFs