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

Hvad vil der ske, hvis afvikling anvendes på et felt, som ikke er til stede, mens der bruges aggregering i mongoose

Nej, det gør det ikke:

Her er et simpelt eksempel:

> 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.

Men:

> 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"""

I henhold til din redigering, hvis du har brug for at opbevare dokumenter med en manglende felt for at slappe af, kan du $project en standardværdi, der bruger $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. Sådan konfigureres Redis i brugerdefineret navneområde som cache og MQ på ServiceStack-webapplikation ved hjælp af Structuremap

  2. Hvordan finder man alle datointervaller, der overlapper et andet datointerval i MongoDB?

  3. Sådan summerer du værdien af ​​en nøgle på tværs af alle dokumenter i en MongoDB-samling

  4. Lancering af ElastiCache-integration