- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我一直在尝试通过 _id
在找到的文档中获取子文档。
示例架构
var User = mongoose.Schema({
name: String,
photos: [{src: String, title: String}]
});
var Team = db.model('Team', Team);
现在我得到了一个用户:
myUser = User.findOne(...)...
我现在如何通过 _id
(或 title
)获取他照片的 src
?
类似:
myUser.photos.findOne({'_id': myId})
最佳答案
您需要为嵌入的文档创建一个 NEW Schema,或者将类型声明保留为空白数组,以便 mongoose
解释为 Mixed
类型。
var userSchema = new mongoose.Schema({
name: String,
photos: []
});
var User = mongoose.model('User', userSchema);
var userSchema = new mongoose.Schema({
name: String,
photos: [photoSchema]
});
var photoSchema = new mongoose.Schema({
src: String,
title: String
});
var User = mongoose.model('User', userSchema);
然后你就可以这样保存了:
var user = new User({
name: 'Bob',
photos: [ { src: '/path/to/photo.png' }, { src: '/path/to/other/photo.png' } ]
});
user.save();
从这里,您可以简单地使用数组原语来查找您的嵌入式文档:
User.findOne({name: 'Bob'}, function (err, user) {
var photo = user.photos.filter(function (photo) {
return photo.title === 'My awesome photo';
}).pop();
console.log(photo); //logs { src: '/path/to/photo.png', title: 'My awesome photo' }
});
您可以使用嵌入式文档中特殊的 id()
方法按 id 查找:
User.findOne({name: 'Bob'}, function (err, user) {
user.photos.id(photo._id);
});
您可以在此处阅读更多信息:http://mongoosejs.com/docs/subdocs.html
确保不要向 mongoose 注册架构,否则它将创建一个新集合。还要记住,如果经常搜索子文档,最好使用下面的 refs 和 population。即使它两次命中数据库,由于索引,它的速度要快得多。此外,mongoose
会在双嵌套文档上运行(即 child 也有子文档)
var user = mongoose.Schema({
name: String,
photos: [{ type: Schema.Types.ObjectId, ref: 'Photo' }]
});
var photo = mongoose.Schema({
src: String,
title: String
});
User
.findOne({ name: 'foo' })
.populate('photos')
.exec(function (err, user) {
console.log(user.photos[0].src);
});
相关文档可以在这里找到 http://mongoosejs.com/docs/populate.html
关于MongoDB, Mongoose : How to find subdocument in found document?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21142524/
我的数据库架构如下所示: { "_id" : 137, "name" : "Tamika Schildgen", "scores" : [ { "score" : 4.4339
我正在寻找有关关闭属性选择的正确语法的帮助,该属性是一组子文档。我希望有一些类似的东西: var UserSchema = new Schema( { fb_id
我正在执行一个循环和更新,类似于this . 我有一个包含如下字段的现有文档: "field1" : { "field2" : [] } 使用空数组。 使用 Java,如何将文档放入空数组中?
我有以下型号: 产品: var ProductSchema = new Schema({ name: String, comments: [{ type: Schema.Types.ObjectId,
我一直在尝试通过 _id 在找到的文档中获取子文档。 示例架构 var User = mongoose.Schema({ name: String, pho
我有以下 mongo 集合: { "_id" : ObjectId("000000000001"), "username" : "user1", "password" : "p
我是 Express/Mongoose 和后端开发的新手。我正在尝试在我的架构中使用 Mongoose 子文档并将数据从表单发布到 MLab 数据库。 当我只使用父架构时,我成功地发布到数据库,但是当
具有以下更新查询: var template = {name:'my_name', ...}; ApplicationModel.update({ _id: idApplication
我有一个名为 Routine 的类,它具有属性名称和练习。 RoutineExercises 类型的 ArrayList 中的练习。 当我将我的例程写入我的 Firestore 数据库时,它会像它应该
在 mongoose 上,有一个很好的选项可以默认使用 select: false 选项从查询中删除一些字段。 例如: var FileSchema = new Schema({ filename
我在 dotnetcore 2.1 中使用 MongoDB.Driver nuget 包。我正在尝试返回集合中的文档列表,其中子文档字段等于我拥有的列表中包含的任何项目。理想情况下,我需要在 C# 语
我在 mongoose 中有一个 upsert 查询,它在 3.8 中运行,但是在我升级到 4 之后,我得到了 Unable to invalidate a subdocument that has
我已经开始学习Mongo了。给定以下集合,例如所谓的帖子,我将如何将新评论插入到现有文档中?我在 mongo 网站上看到的示例是针对“简单”集合的。感谢您的帮助。 { "_id" : ObjectId
例如我们有收藏 {field: {subfield: 'name'}} {field: {subfield: 'phone'}} 我可以找到没有点符号的文档吗?像这样 db.test.find({fi
我正在尝试在聚合上使用 $filter 。我需要过滤一个名为“extras”的数组,该数组至少与他的一个“季节”与给定的“日期”相交。 这里是一个例子: var from = new Date(201
我有一个使用expressjs和mongoosejs编写的Web api。 应用程序中的主架构包含一个子文档permissions,其中包含数组字段。这些数组包含可以对该文档执行操作的用户 ID。 我
通过指定 fields 参数,可以轻松管理 db.find() 结果集中某些字段的存在(我使用 Meteor 并在服务器端测试所有查询, 在发布功能中)。说 Meteor.collection.fin
我是一名优秀的程序员,十分优秀!