首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mongoose正在从数组中的嵌入文档中删除空对象

mongoose正在从数组中的嵌入文档中删除空对象
EN

Stack Overflow用户
提问于 2014-11-03 04:02:42
回答 3查看 2.7K关注 0票数 7

注意下面的代码,它显示了一个包含2个数组的架构,其中一个被配置为from Type:

代码语言:javascript
复制
[
  mongoose.Schema.Types.Mixed
]

其中一个被配置为from类型:

代码语言:javascript
复制
[
 {
   value: mongoose.Schema.Types.Mixed
 }
]

代码如下:

代码语言:javascript
复制
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var schema  = new mongoose.Schema({
  withSchema:    [{  
    value:mongoose.Schema.Types.Mixed}
  ],  
  withoutSchema: [mongoose.Schema.Types.Mixed],
} , {minimize: false});
var Tweak = mongoose.model('tweak', schema );

我使用相同的数据更新文档:

代码语言:javascript
复制
var data = { 
  "withSchema"    : [ { "value": { a:"221", b:{} } } ],
  "withoutSchema" : [ { "value": { a:"221", b:{} } } ] 
} 
Tweak.findByIdAndUpdate("545680170960023a185ea77e", data, function(err, doc){
  console.log(doc);
  //{ 
  // "withSchema"    : [ { "value": { a:"221" } } ],
  // "withoutSchema" : [ { "value": { a:"221", b:{} } } ] 
  //} 
});

如何防止此b:{}删除?

编辑

事实证明,只有当数组中有embeddedDocument时,才会发生这种情况。

EN

回答 3

Stack Overflow用户

发布于 2018-06-09 04:03:55

从数组中删除空对象-是由schema的minimize选项引起的-该选项缺省为'true‘。Erken在上面被否决的答案中的一条评论中回答了这个问题--把它作为一个单独的答案,这样人们就可以找到它。

在架构中可以重写为'false‘-然后它将在数组中保存空对象

var schema = new Schema({ name: String, inventory: {} }, { minimize: false });

来自http://mongoosejs.com/docs/guide.html#minimize

票数 13
EN

Stack Overflow用户

发布于 2014-11-11 13:25:20

这种方法首先从Mongo检索文档,然后发出更新命令(由调用save触发)。看一下下面的代码。

代码语言:javascript
复制
var id = "54619b5ef610b70b14a46e79";
Tweak.findById(id, function(err, result) {
    if (err) {
        console.log(err);
    }
    console.log(result.withSchema[0].value);
    result.withSchema[0].value = data.withSchema[0].value;
    result.withoutSchema.value = data.withoutSchema.value;
    result.save(function(err) {
        if (err) {
            console.log(err);
        }
        console.log('updated');
    });
});

保存文档后,使用适当的“id”值运行代码片段。

票数 0
EN

Stack Overflow用户

发布于 2014-11-05 06:00:57

mongoose会跳过求值为null的对象(就像你的b一样)。由于在所有MongoDB驱动程序甚至外壳查询中,空的或不存在的对象的计算结果都是null,因此是否保存空的b实际上并不重要。

例如,如果查询b是否存在,由于b为空,因此它的计算结果为null,因此对该文档的查询将失败,无论b是空值还是根本不存在。

由于您已经使用了minimize选项,因此我假定不显示空结果,因为它的计算结果为null。当用shell检查时,键应该是空值。

底线:出于所有实际目的,无论b是否包含空值,都没有区别。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26703742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档