Mongoose: 嵌入在带有任意键的对象中的文档?

创建于 2012-01-12  ·  40评论  ·  资料来源: Automattic/mongoose

有没有办法在没有预定键的对象中使用嵌入式文档? 即,而不是有这样的情况:

var myschema = new mongoose.Schema({
   field : { foo: String, bar: String }
});

能够说类似的话:

var myschema = new mongoose.Schema({
   field : { *: String }
});

以这种方式使它更像数组 - 但我的想法是我事先不知道密钥,但我仍然希望能够拥有一个嵌入式文档。

enhancement

最有用的评论

这个功能是必须的。

所有40条评论

那没有。

Mixed类型呢?

@aheckmann - 这就是我所担心的,你知道这是否在路线图上,或者这只是不是广泛需要的东西吗?

@TooTallNate - 对,这是默认设置。 问题是混合后您会丢失所有通过受支持的(命名键和数组)嵌入式文档获得的验证/模式内容。

@ordrin 以前没有人需要它

好吧,没想到我做了这么深奥的事情! 该死。

我有一个用例,至少我相信它是相关的。

我正在制作一个 ACL 系统。

我的任务有 _ids 是字符串。

我想将这些 id 嵌入到我的会员的会员记录中(他们可以执行的一系列任务)。

虽然我当然可以在它们的“tasks”属性中放置一个字符串数组,但理想情况下,我希望在这种情况下使用 DBrefs,这样我就可以提取元数据。

@ordrin我刚刚重新阅读了这篇文章。 你看过使用 Mixed 吗? 我可能误解了 b/ci 对“嵌入式文档”的看法与 MongoDB 对它们的引用方式不同。 这通常是您可以使用 Mixed 执行的操作。

var myschema = new mongoose.Schema({
   field : mongoose.Schema.Types.Mixed
});

这与您要求的非常接近。 在这种情况下,“字段”可以分配给任何值。您可以为其分配一个对象文字并添加一个自定义验证器以确保值是字符串。

myschema.path('field').validate(yourCustomValidator, 'your custom vaildator failed msg');

function yourCustomValidator (value) {
  // check that value is an object etc
  return true|false
}

var M = mongoose.model('M', myschema);
var m = new M;
m.field = { might: "work", for: "you" }
m.save();

http://mongoosejs.com/docs/schematypes.html

我只是想补充一点,我正在寻找与此类似的功能。 我想拥有具有强类型模式值的动态键。 如果我们可以避免手动验证,那就太好了。

new mongoose.Schema({
    dynamicKey: {foo: Number, isAwesome: Boolean}
});

or 

new mongoose.Schema({
    dynamicKey: value is always only a Number
});

+1

+1

+1。

我发布了关于此问题的SO 帖子。 如果有人知道使用动态密钥验证属性的好方法,请随时发布。

如果它是内置的,我可能会布局一个类似的模式

new Schema({
  myDynamicKeyObj: {
    type: Dynamic, 
    key: {type: String, match: /[a-z]*/i}, 
    val: [String] 
  } 
})

+1

拥有动态键会很棒。 如果您要编写一个json-schema ,您可以执行类似的操作来匹配整数键:

"^[0-9]+$": {
    "$ref": "#/definitions/mydefinition"
}

任何具有动态密钥的解决方案还是没有?
2 个对象的示例:
{ 123: { firstname: "firstA", lastname: "lastA" } }
{ 124: { firstname: "firstB", lastname: "lastB" } }

同样的问题。 我想做 mongodb 文档中解释的分析。 http://docs.mongodb.org/ecosystem/use-cases/pre-aggregated-reports/

+1

:+1:

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

我需要这口井

+1

停止那些无意义的 +1 ,它们最终会查看人们的收件箱。

有“订阅”和“反应”按钮是有原因的。

+1

@qqilihq ,执行plx,然后我们停止+1,kthxbye

“以前没有人需要它”
5 年后,大量 +1 之后,仍然没有更新?

由于这是我能找到的与此相关的最古老的问题,因此我将重新打开并关闭 #1522,以便尽可能多的人可以跟踪更新。

这个功能是必须的。

这个功能是如何悄然发布的,以至于我没有意识到它?! 💯

@adamreisnz大声笑谢谢。 您在哪里寻找 Mongoose 功能更新? 变更日志? 推特?

通常是更新日志,但一定错过了这个!

此页面是否有帮助?
0 / 5 - 0 等级