नहीं, ऐसा नहीं है:
यहाँ एक सरल उदाहरण है:
> 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.
लेकिन:
> 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"""
आपके संपादन के अनुसार, यदि आपको दस्तावेज़ों को गायब . के साथ रखने की आवश्यकता है आराम करने के लिए, आप $project
कर सकते हैं $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 }