无法使用位置字段创建 Mongoose 对象

Posted

技术标签:

【中文标题】无法使用位置字段创建 Mongoose 对象【英文标题】:Cannot create Mongoose Object with location field 【发布时间】:2018-06-01 08:42:14 【问题描述】:

使用 Mongoose,我无法将位置数据插入数据库:

Can't extract geo keys from object, malformed geometry?

似乎 POST 请求正常(LOG A):它有一个位置('loc')字段,但我从这个 POST 请求创建的对象缺少 'loc' 字段数据:

这是我的架构:

models/Article.js

var ArticleSchema = new mongoose.Schema(
    slug: type: String, lowercase: true, unique: true,
    title: String,
    description: String,
    body: String,
    loc :   type: type:String, coordinates: [Number],
    favoritesCount: type: Number, default: 0,
    comments: [ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' ],
    tagList: [ type: String ],
    author:  type: mongoose.Schema.Types.ObjectId, ref: 'User' 
, timestamps: true);

ArticleSchema.index(loc: '2dsphere');

routes/Article.js

router.post('/', auth.required, function(req, res, next) 
  User.findById(req.payload.id).then(function(user)
      if (!user)  return res.sendStatus(401); 

      var article = new Article(req.body.article);

      // LOG A
      console.log(req.body.article);

      // LOG B
      console.log(article);

      article.author = user;

      return article.save().then(function()
         return res.json(article: article.toJSONFor(user));
      );
      ...

这是输出:

日志 A:req.body.article

 title: 'article title',
  description: 'about section',
  body: 'Article body',
  tagList: [],
  loc: '"type":"Point","coordinates":[38.9173025,-77.220978]' 

LOG B : 使用 var article = new Article(req.body.article);

创建的文章
 loc:  coordinates: [] ,
  favoritesCount: 0,
  comments: [],
  tagList: [],
  _id: 5a384f502c9912312c6dd89d,
  body: 'Article body',
  description: 'about section',
  title: 'article title' 

我的问题是 loc 字段开始 " coordinates: [] " 而不是 "type":"Point","coordinates":[38.9173025,-77.220978 ] 创建对象“文章”时。

为什么位置数据不在 Object 中?

我一直在寻找这个问题:Location in mongoose, mongoDB

【问题讨论】:

不能转换它,因为它是字符串(注意 Log A 输出中 loc 变量的值周围的单引号),而 mongoose 需要对象? 【参考方案1】:

感谢@Veeram:问题是我的 POST 请求:位置是作为字符串而不是对象发送的:

在我的 Angular 前端:

article.model.ts 之前

export class Article 
  ....
  loc: string
  ....

article.model.ts 之后

class Location 
  constructor(
    public type: string,
    public coordinates: Array<number> = []
  )


export class Article 
  ....
  loc: Location
  ....

【讨论】:

以上是关于无法使用位置字段创建 Mongoose 对象的主要内容,如果未能解决你的问题,请参考以下文章

无法使用位置字段创建Mongoose对象

Mongoose - 无法使用“findOrCreate”创建超过 4 个字段

无法向 Mongoose 查询返回的对象添加新属性 [重复]

无法向 Mongoose 查询返回的对象添加新属性 [重复]

无法使用 mongoose 在 mongodb 中增加字段

Nestjs - Mongoose - 虚拟字段 - 无法在 graphql 操场上查询