gpt4 book ai didi

node.js - Mongoose 嵌入式文档/DocumentsArrays id

转载 作者:可可西里 更新时间:2023-11-01 09:07:48 24 4
gpt4 key购买 nike

在以下地址的 Mongoose 文档中: http://mongoosejs.com/docs/embedded-documents.html

有声明:

DocumentArrays have an special method id that filters your embedded documents by their _id property (each embedded document gets one):

考虑以下片段:

 post.comments.id(my_id).remove();
post.save(function (err) {
// embedded comment with id `my_id` removed!
});

我查看了数据,嵌入文档没有 _id,这篇文章似乎证实了这一点:

How to return the last push() embedded document

我的问题是:

文档是否正确?如果是这样,那么我如何找出“my_id”是什么(在示例中)首先执行 '.id(my_id)'

如果文档不正确,使用索引作为文档数组中的 id 是否安全,或者我应该手动生成一个唯一的 Id(根据提到的帖子)。

最佳答案

而不是像这样使用 json 对象执行 push()( Mongoose 文档建议的方式):

// create a comment
post.comments.push({ title: 'My comment' });

您应该创建嵌入对象的实际实例,然后用 push() 代替。然后你可以直接从里面抓取_id字段,因为mongoose是在实例化对象的时候设置的。这是一个完整的例子:

var mongoose = require('mongoose')
var Schema = mongoose.Schema
var ObjectId = Schema.ObjectId

mongoose.connect('mongodb://localhost/testjs');

var Comment = new Schema({
title : String
, body : String
, date : Date
});

var BlogPost = new Schema({
author : ObjectId
, title : String
, body : String
, date : Date
, comments : [Comment]
, meta : {
votes : Number
, favs : Number
}
});

mongoose.model('Comment', Comment);
mongoose.model('BlogPost', BlogPost);

var BlogPost = mongoose.model('BlogPost');
var CommentModel = mongoose.model('Comment')


var post = new BlogPost();

// create a comment
var mycomment = new CommentModel();
mycomment.title = "blah"
console.log(mycomment._id) // <<<< This is what you're looking for

post.comments.push(mycomment);

post.save(function (err) {
if (!err) console.log('Success!');
})

关于node.js - Mongoose 嵌入式文档/DocumentsArrays id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8994670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com