无法使用MongoDB更新或查询嵌入的子文档?那是什么?

时间:2016-01-11 18:03:12

标签: mongodb mongoose nosql

我对NoSQL的所有RDBMS偏见采取了冲击。但我相信。现在我发现自己已经进入了一个项目3个月,而且我们遵守RDMS原则的确切原因似乎正在咬我。我想我刚刚在stackoverflow上发现了我无法使用两次嵌入式数组。我遵循noSQL,嵌入式文档方法,就像一个好的kool-aid饮酒者,觉得我被背叛了。在我发誓noSQL之前,回过头来重构我的整个代码库以坚持新的'规范化的'模特我喜欢这里的一些无sql冠军。

这是我的模型使用一个带有嵌入式文档和作品的大文档:

var mongoose = require('mongoose'),
Schema = mongoose.Schema,
User = mongoose.model('User');

var Entry = new Schema({
   text: String,
   ups: Number,
   downs: Number,
   rankScore: Number,
   posted: { 
     type: Date, 
     default: Date.now 
   },
   postedBy: {
     type: mongoose.Schema.Types.ObjectId,
     ref: 'User'
   }
});    

var boardSchema = new Schema({
  theme: String,
  created: {
    type: Date,
    default: Date.now
  },
  owner: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  },
  entered: {
    type: Boolean,
    default: false
  },
  entries: [Entry],
  participants: [{
    user: { type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    date: { type: Date, default: Date.now },
    topTen: [ { type: mongoose.Schema.Types.ObjectId, ref: 'Entry'} ]
  }]
});
mongoose.model('Board', boardSchema);

基本上,我想通过Board._id查询文档,然后在participant.user == req.user.id中查询,我想添加到topTen []数组。注意参与者[]是文档中的数组,topTen是参与者[]中的数组。我发现了其他类似的问题,但我被指向了一个Jira项目,看起来它不会被实现以允许在多个嵌入式数组中使用$ position操作。现在有没有办法做到这一点?或者,如果有人建议如何对我的文档进行建模,以便我不必使用新的标准化参考模型完全重写...请帮忙!

以下是我在网上找到的一些查询尝试。没有什么对我有用。

Board.update({_ id:ObjectId(' 56910eed15c4d50e0998a2c9'),' participant.user._id&#39 ;: ObjectId(' 56437f6a142974240273d862')},{$设置:{' participant.0.topTen。$。entry':ObjectId(' 5692eafc64601ceb0b64269b')}}

我读过你应该避免这样的'嵌套'设计,但嵌入式模型很难不。基本上这句话对我说是不要嵌入"去"参考"。

0 个答案:

没有答案