2017-04-26 55 views
3

MongoError:无法识别的管道阶段名称:'$ addFields'。 “猫鼬”: “^ 4.5.8” 我的源代码:

   Post.aggregate(
        [{ 
         $addFields: { 
          userName: { $concat: [ "$author.firstName", " ", "$author.lastName" ] } 
         } 
         //$project: { userName: { $concat: [ "$author.firstName", " ", "$author.lastName" ] } } //this is ok! 
        }], 
        function (err, result) { 
         if (err) { 
          console.log(err); 
          return; 
         } 
         console.log(result); 
        } 
       ) 

Post模型:

let schema = { 
id: "post", 
properties: { 
    content: {type: "string"}, 
    author: { 
     type: "object", 
     id: {type: "string"}, 
     avatar: {type: "string"}, 
     firstName: {type: "string"}, 
     lastName: {type: "string"}, 
     status: {type: "string"} 
    }, 
    category: { 
     type: "object", 
     id: {type: "string"}, 
     name: {type: "string"} 
    }, 
    images: { 
     type: "array", 
     items: { 
      type: "object", 
      properties: { 
       filePath: {type: "string"}, 
      } 
     } 
    }, 
    video: { 
     type: "object", 
     thumbnail: {type: "string"}, 
     filePath: {type: "string"} 
    }, 
    likes: { 
     type: "array", 
     items: { 
      type: "object", 
      properties: { 
       userId: {type: "string"}, 
       status: {type: "string"}, 
       _id : {type: "string", default: null} 
      } 
     } 
    }, 
    shares: { 
     type: "array", 
     items: { 
      type: "object", 
      properties: { 
       userId: {type: "string"}, 
       status: {type: "string"}, 
       destination: {type: "string"}, //FACEBOOK|TWISTER|GOOGLE 
       _id  : {type: "string", default: null} 
      } 
     } 
    }, 
    favorites: { 
     type: "array", 
     items: { 
      type: "object", 
      properties: { 
       userId: {type: "string"}, 
       status: {type: "string"}, 
       _id : {type: "string", default: null} 
      } 
     } 
    }, 
    comments: { 
     type: "array", 
     items: { 
      type: "object", 
      properties: { 
       commentId: {type: "string"}, 
       _deleted: {type: "Date", default: ''}, 
       _id  : {type: "string", default: null} 
      } 
     } 
    }, 
    _created: {type: "Date", default: Date.now}, 
    _deleted: {type: "Date", default: ''}, 
    _updated: {type: "Date", default: ''} 
} 
+2

是什么版本的MongoDB上使用下面的方法? '$ addFields'在3.4中引入 – sidgate

+0

mongodb的版本是^ 4.5.8 –

+0

in packge.json: “mongoose”:“^ 4.5.8”, “mongoose -json-select”:“^ 0.2.1”, “mongoose-unique-validator”:“^ 1.0.2”, –

回答

7

$addFields在蒙戈3.4版本介绍。正如你所说的你使用的是mongo 3.2.9,所提到的查询不起作用。

如果您不能更新由于某种原因蒙戈版本,那么你有,你需要遍历每个文档和设置新的领域

Post.find({}).forEach(function(post){ 
    post.findOneAndUpdate({_id: post._id}, 
     {$set: {userName: post.author.firstName + " " + post.author.lastName }}) 
}); 
+0

修改原始文档是一个糟糕的解决方法。在OP的问题中注释掉了“$ project”是正确的解决方法。 – JohnnyHK

+0

非常感谢!我更新了mongo版本并解决了我的问题 –

相关问题