javascript - 如何在 Meteor 中使用嵌入文档

标签 javascript node.js mongodb meteor simple-schema

我是 Meteor 的新手,我想在我的用户集合中使用嵌入文档。我正在使用由 collection2 包添加的简单模式。但是,当我定义嵌入文档时,就像我在 Node.js 项目之一中简单定义的那样,该文档运行成功,没有任何错误,但当我在 User 集合内的 Meteor 项目中定义相同的文档时,它会抛出一个 错误,即

    /home/parveen/.meteor/packages/meteor-tool/.1.3.2_4.10vjklo++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:267
W20160604-23:22:34.819(5.5)? (STDERR)                       throw(ex);
W20160604-23:22:34.819(5.5)? (STDERR)                             ^
W20160604-23:22:34.941(5.5)? (STDERR) Error: Invalid definition for location field.
W20160604-23:22:34.941(5.5)? (STDERR)     at packages/aldeed_simple-schema/simple-schema.js:457:1
W20160604-23:22:34.941(5.5)? (STDERR)     at Function._.each._.forEach (packages/underscore/underscore.js:113:1)
W20160604-23:22:34.941(5.5)? (STDERR)     at [object Object].SimpleSchema (packages/aldeed_simple-schema/simple-schema.js:454:1)
W20160604-23:22:34.941(5.5)? (STDERR)     at meteorInstall.collections.Users.js (collections/Users.js:11:14)
W20160604-23:22:34.942(5.5)? (STDERR)     at fileEvaluate (packages/modules-runtime/.npm/package/node_modules/install/install.js:141:1)
W20160604-23:22:34.942(5.5)? (STDERR)     at require (packages/modules-runtime/.npm/package/node_modules/install/install.js:75:1)
W20160604-23:22:34.942(5.5)? (STDERR)     at /home/parveen/differentialImaging/.meteor/local/build/programs/server/app/app.js:957:1
W20160604-23:22:34.942(5.5)? (STDERR)     at /home/parveen/differentialImaging/.meteor/local/build/programs/server/boot.js:283:10
W20160604-23:22:34.942(5.5)? (STDERR)     at Array.forEach (native)
W20160604-23:22:34.942(5.5)? (STDERR)     at Function._.each._.forEach (/home/parveen/.meteor/packages/meteor-tool/.1.3.2_4.10vjklo++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/underscore/underscore.js:79:11)
=> Exited with code: 8
=> Your application is crashing. Waiting for file change.

我的架构如下:-

 UserSchema = new SimpleSchema({
name:{
    type: String,
    trim: true,
    optional: true
},
email:{
    type:String,
    trim: true,
    optional: true
},
password:{
    type:String,
    trim: true,
    optional: true
},
location: {
         latitude: {
             type: Number,
             default: 0,
             required: false
         },
         longitude: {
             type: Number,
             default: 0,
             required: false
         },
         state: {
             type: String,
             default: '',
             requried: false,
             trim: true
         },
         city: {
             type: String,
             default: '',
             requried: false,
             trim: true
         }
     },
createdAt:{
    type:Date,
    label:"Created At",
    autoValue:function(){
        return new Date();
    }

}
});
Users.attachSchema(UserSchema);

正如您所看到的,我正在使用嵌入文档的位置字段给出了错误。

请告诉我如何在 Meteor 中实现相同的目标,否则我在这里做错了什么。除了简单模式之外,我是否需要使用任何其他模式,或者我们也可以通过简单模式实现相同的目的。

任何帮助建议将不胜感激 谢谢

最佳答案

要定义嵌入式验证规则,您需要创建一个新的架构对象,并将其作为字段传递(简单架构不会查看您的对象结构):

LocationSchema = new SimpleSchema({
         latitude: {
             type: Number,
             default: 0,
             required: false
         },
         longitude: {
             type: Number,
             default: 0,
             required: false
         },
         state: {
             type: String,
             default: '',
             requried: false,
             trim: true
         },
         city: {
             type: String,
             default: '',
             requried: false,
             trim: true
         }
});

UserSchema = new SimpleSchema({
    //... other fields
    location: LocationSchema,
    //...
});

然后在您的代码中,您可以:

Users.insert({
  //...
  location: {latitude: 4.12, longitude: 6.18, state:"Colorado", city "Whatever"}
  //...
});

您可以在 the collection2 documentation 中看到另一个示例.

关于javascript - 如何在 Meteor 中使用嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37633584/

相关文章:

javascript - 如何设置 Twitter 关注按钮,在关注后启用另一个按钮

node.js - 匹配 Mongoose 中的两个不同字段,聚合?

node.js - 在 EJS 中循环 JSON

MongoDB - 将数组拆分为多个文档并用数组对象替换现有文档

javascript - findOne 返回 null 但它不应该返回 null (mongoDB)

javascript - 使用 JQuery 自动刷新 DIV

javascript - 如何从 tensorflow.js 下载模型和权重

node.js - populate 对 Mongoose 不起作用总是返回未定义

javascript - 查找数组包含多于 X 条记录的记录?

javascript - array.splice() 函数解释