Mongodb 用于返回字段长度/大小的投影选项
我只是想编写一个mongo查询,如SQL中的:Mongodb 用于返回字段长度/大小的投影选项,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我只是想编写一个mongo查询,如SQL中的: SELECT LENGTH(binaryBody) AS bodyLength FROM documents; 为此,我想我必须使用find方法的投影 db.documents.find( {<query>}, { bodyLength: {$size: 'body'}} ); db.documents.find( {}, {bodyLength:{$size:'body'} ); 但如何做到这一点呢 错误:错误: {“w
SELECT LENGTH(binaryBody) AS bodyLength FROM documents;
为此,我想我必须使用find方法的投影
db.documents.find(
{<query>},
{ bodyLength: {$size: 'body'}}
);
db.documents.find(
{},
{bodyLength:{$size:'body'}
);
但如何做到这一点呢
错误:错误:
{“waitedMS”:NumberLong(0),“ok”:0,“errmsg”:
“不支持的投影选项:bodyLength:{$size:\'body\'}”,
“代码”:2}
.find()
不会以任何方式“更改”返回的文档。只能在投影中“包含”或“排除”
唯一“改变”的是或
对于.aggregate()
,要求或使用MongoDB 3.4,但通常指前者:
db.documents.aggregate([
{ "$project": {
"bodyLength": { "$strLenCP": "$body" }
}}
])
对于.mapReduce()
实际上,在后一种情况下,您可能需要迭代光标,除非集合足够小,或者您可以实际输出到另一个集合
您尝试使用的运算符仅适用于“数组”以返回当前的条目数。同样,它仅适用于.aggregate()
方法
如果要省略字符串中的字符,如空格
,则可以应用and with:
db.documents.aggregate([
{ "$addFields": {
"bodyLength": {
"$strLenCP": {
"$reduce": {
"input": { "$split": [ "$name", " "] },
"initialValue": "",
"in": { "$concat": [ "$$value", "$$this" ] }
}
}
}
}}
])
或者再次使用mapReduce()
:
db.documents.aggregate([
{ "$addFields": {
"bodyLength": {
"$strLenCP": {
"$reduce": {
"input": { "$split": [ "$name", " "] },
"initialValue": "",
"in": { "$concat": [ "$$value", "$$this" ] }
}
}
}
}}
])
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 } }
);