Mongodb为结果添加其他属性

时间:2017-10-17 09:22:07

标签: mongodb mongodb-query

有没有办法做到这一点就像在mysql中的Mongo。

Mysql的

select name,pass,'20' as age from table

蒙戈

对集合的一些查询

文件将

{
   name:"name",
   pass:"pass",
   age:'20'
}

2 个答案:

答案 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"}}])