就地更改Mongodb查询结果[重复]

Posted

技术标签:

【中文标题】就地更改Mongodb查询结果[重复]【英文标题】:Change Mongodb query result in place [duplicate] 【发布时间】:2014-09-21 21:51:03 【问题描述】:

Restaurant 是 Mongoose 模型。我试图改变一些东西,但它不起作用:

  Restaurant.find(, function(err, results) 
    for (var i = 0; i < results.length; i++) 
      delete results[i].__v;
  

我认为results[i] 是一个模型对象。我试图用以下内容检查属性描述符,上面写着undefined

console.log(JSON.stringify(Object.getOwnPropertyDescriptor(results[i], '__v')));

为什么删除对象不起作用?我怎么看不到属性描述符?

编辑: 所以这是一个 Mongoose 文档。但是在 javascript 的说法中,像 Mongoose 文档这样的对象可以基于 Javascript 对象以外的其他东西吗?一些基于内部 C 代码或其他东西的包装器?

【问题讨论】:

【参考方案1】:

results 不是 Javascript 对象,因此您不能使用 remove

你可以用results.toObject()doc在Javascript对象中转换

或者你可以这样做 Restaurant.find(,lean:truedoc

然后你就可以delete results[i].__v;

【讨论】:

如果不是JS对象实现的,是什么? 我是Mongoose Document 启用了精简选项的查询返回的文档是纯 JavaScript 对象,而不是 MongooseDocuments。 是的,谢谢你,我明白了。尽管用 Javascript 的说法,如果 Mongoose Document 不是一个 JS 对象,它又是什么对象呢?据我所知,JS 中的每个对象都是一种 JS 对象。你怎么做的东西不是? lean:true 不起作用。它仍然不允许我添加或删除字段。

以上是关于就地更改Mongodb查询结果[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB运行错误[重复]

MongoDB 记录所有查询

MongoDB状态查询:db.serverStatus()

mongoDB配置

RPC 在 C 中就地更改值

mongodb