gpt4 book ai didi

node.js - 尝试在 Mongoose 中动态生成 _id,但返回对象

转载 作者:可可西里 更新时间:2023-11-01 10:32:36 25 4
gpt4 key购买 nike

基本上,我正在尝试对集合中的文档进行计数,并将新文档设置为 _id。我尝试了多种组合,但似乎都不起作用。

这是我尝试过的:

var count = PostModel.find( function( err, posts ) {
if ( !err ) {
return posts.length;
}
else {
return console.log( err );
}
});

var post = new PostModel({
_id: count,
title: request.body.title,
content: request.body.content,
tags: request.body.tags
});

返回:

{ message: 'Cast to number failed for value "[object Object]" at path "_id"',
name: 'CastError',
type: 'number',
value:
{ options: { populate: {} },
safe: undefined,
_conditions: {},
_updateArg: {},
_fields: undefined,
op: 'find',
model:
{ [Function: model]
modelName: 'Post',
model: [Function: model],
options: undefined,
db: [Object],
schema: [Object],
collection: [Object],
base: [Object] } },
path: '_id' }

还有这个:

var post = new PostModel({
_id: PostModel.find( function( err, posts ) {
if ( !err ) {
return posts.length;
}
else {
return console.log( err );
}
}),
title: request.body.title,
content: request.body.content,
tags: request.body.tags
});

返回相同的错误。但是,当我单独添加以下内容时,它会记录集合的长度:

PostModel.find( function( err, posts ) {
if ( !err ) {
return console.log(posts.length);
}
else {
return console.log( err );
}
});

我也尝试以各种方式使用 count(),但我无法取得任何进展。关于如何查询集合的计数并将其设置为 _id 的任何见解都会非常有帮助。

最佳答案

首先,这在 MongoBD 中不推荐,因为它不能很好地扩展。

但如果你真的想做,有说明here在官方 MongoDB 文档中找到一种安全的好方法。

基本上,您使用一个小文档来保存当前序列 ID,每次您插入一个文档时,您都会自动读取和递增该序列。这比每次插入时都计算文档的效率要高得多。

使用您的解决方案,如果两个进程同时运行会怎样?您最终可能会得到相同的 ID,因为您的插入和序列生成/计数不是原子的。

编辑:

要从您的模型中获取计数,请使用以下命令:

PostModel.count( function (err, count) {
if (err) ..
console.log('there are %d posts', count);
});

由 OP 编辑​​:

根据下面的评论,问题在于同步使用异步函数。当所有代码都移到回调函数时,它就起作用了。这是解决方案:

PostModel.count( function (err, count) {
if (err)
console.log(err);
else {
console.log('there are %d posts', count);

var post = new PostModel({
_id: count,
title: request.body.title,
content: request.body.content,
tags: request.body.tags
});

post.save( function( err ) {
if( !err ) {
return console.log( 'Post saved');
} else {
console.log( err );
}
});

return response.send(post);
}
});

关于node.js - 尝试在 Mongoose 中动态生成 _id,但返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19761156/

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