有没有办法做到这一点就像在mysql中的Mongo。
Mysql的
select name,pass,'20' as age from table
蒙戈
对集合的一些查询
文件将
{
name:"name",
pass:"pass",
age:'20'
}
答案 0 :(得分:1)
使用.aggregate()
,$addFields
或$project
和$literal
作为值。
明确选择:
db.collection.aggregate([
{ "$project": {
"name": 1,
"pass": 1,
"age": { "$literal": '20' }
}}
])
或$addFields
只是“追加”到现有字段:
db.collection.aggregate([
{ "$addFields": {
"age": { "$literal": '20' }
}}
])
$literal
实际上不需要$addFields
,因为它实现了一种“合并”,并且没有$project
的遗留参数限制。但它不会造成伤害,也不会让人感到困惑。
仅从原始表单返回.aggregate()
(或确实mapReduce
)“atlter”文档。您可以使用.find()
所做的一切,并且支持“投影”是“包含”或“排除”属性,或者是数组成员,因为这是文档数据库的全部内容。
更改形状通常需要.aggregate()
作为常规工具。
备用案例当然是在您从服务器返回结果后“添加”数据。对于恒定值,这通常是最有意义的,并且还有另一个原因:
db.collection.find({},{ name: 1, pass: 1 }).map( doc =>
Object.assign(doc,{ age: '20' })
)
这是一个非常简单的构造,所有驱动程序都有类似的游标转换方法。
您应该考虑这一点的主要原因是,当您可以在后期处理中轻松添加时,从数据库服务器返回信息几乎没有增加响应有效负载的信息。
这意味着您的数据库服务器的流量也会减少,而且当您像现在这样的服务一样为此付费时,您应该考虑这一点。
所以在“只是因为你不能意味着你应该”的类别下,这也应该适用于其他数据库引擎,不要让数据库做你真正不需要的事情。
但真的是个人选择。
答案 1 :(得分:0)
您可以使用aggregate和$ project运算符在文档中添加额外的列。示例如下:
db.getCollection('table').aggregate([{ $project{"name":1,"pass":1,"age":"20"}}])