.find()
किसी भी तरह से लौटाए गए दस्तावेज़ों को "बदल" नहीं देता है। आप प्रक्षेपण में केवल "शामिल" या "बहिष्कृत" कर सकते हैं।
केवल "बदलने" वाली चीजें हैं .aggregate()
या .mapReduce()
।
.aggregate()
. के लिए , $strLenCP
के लिए MongoDB 3.4 की आवश्यकता है
या $strLenBytes
, लेकिन आमतौर पर आपका मतलब पूर्व से होता है:
db.documents.aggregate([
{ "$project": {
"bodyLength": { "$strLenCP": "$body" }
}}
])
.mapReduce()
. के लिए
db.documents.mapReduce(
function() {
emit(this._id, this.body.length)
},
function() { },
{ "out": { "inline": 1 } }
);
और वास्तविक रूप से बाद के मामले में, आप कर्सर को पुनरावृत्त भी कर सकते हैं, और जब तक संग्रह काफी छोटा नहीं होता है या आप वास्तव में इसके बजाय किसी अन्य संग्रह में आउटपुट नहीं कर सकते हैं।
$size
आप जिस ऑपरेटर का उपयोग करने का प्रयास कर रहे हैं वह केवल मौजूद प्रविष्टियों की संख्या वापस करने के लिए "सरणी" पर लागू होता है। और फिर, यह केवल .aggregate()
. के उपयोग के लिए मान्य है विधि।
यदि आप space
. जैसे वर्णों को छोड़ना चाहते हैं एक स्ट्रिंग के भीतर फिर एक $split
और $reduce
$concat
के साथ
लागू किया जा सकता है:
db.documents.aggregate([
{ "$addFields": {
"bodyLength": {
"$strLenCP": {
"$reduce": {
"input": { "$split": [ "$name", " "] },
"initialValue": "",
"in": { "$concat": [ "$$value", "$$this" ] }
}
}
}
}}
])
या फिर mapReduce()
. के साथ :
db.documents.mapReduce(
function() {
emit(this._id, "".concat.apply(this.body.split(" ")).length)
// Or even
// emit(this._id, this.body.split(" ").reduce((o,e) => o.concat(e),"").length)
},
function() { },
{ "out": { "inline": 1 } }
);