mongodb 错误 mongoose 不会在数组 $pushAll 中推送对象
Posted
技术标签:
【中文标题】mongodb 错误 mongoose 不会在数组 $pushAll 中推送对象【英文标题】:mongodb Error mongoose do not push object in array $pushAll 【发布时间】:2018-06-17 23:26:10 【问题描述】:我有一个带有 User 和 Post 模型的简单应用,
var mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/assoc", useMongoClient:true);
mongoose.Promise = global.Promise;
//Post
var postSchema = new mongoose.Schema(
title: String,
content: String
);
var Post = mongoose.model("Post", postSchema);
//User
var userSchema = new mongoose.Schema(
email: String,
name: String,
posts: [postSchema]
);
var User = mongoose.model("User", userSchema);
我之前创建了一个用户(名称:“gino”)并将帖子推送到:
// var newUser = new User(
// email: "a.b@c.it",
// name: "gino"
// );
//
// newUser.posts.push(
// title: "gino's post",
// content: "this is content"
// );
//
// newUser.save(function (err, user)
// if (err)
// console.log(err);
// else
// console.log(user);
//
// );
另外创建一个帖子来检查帖子模型是否有效:
// var newPost = new Post(
// title: "honky",
// content: "tonky"
// );
//
// newPost.save(function (err, post)
// if (err)
// console.log(err);
// else
// console.log(post);
//
// );
当我尝试查找“gino”并将新项目推送到帖子数组时,尝试使用此 sn-p 保存用户 (user.save) 时出错:
User.findOne(name: "gino", function (err, user)
if (err)
console.log(err);
else
console.log(user);
user.posts.push(
title: "post",
content: "content"
);
user.save(function (err, user)
if (err)
console.log(err);
else
console.log(user);
);
);
当我运行应用程序时,我得到了这个:
MongoError: Unknown modifier: $pushAll
at Function.MongoError.create (appFolder\node_modules\mongodb-core\lib\error.js:31:11)
at toError (appFolder\node_modules\mongodb\lib\utils.js:139:22)
at appFolder\node_modules\mongodb\lib\collection.js:1059:67
at appFolder\node_modules\mongodb-core\lib\connection\pool.js:469:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
name: 'MongoError',
message: 'Unknown modifier: $pushAll',
driver: true,
index: 0,
code: 9,
errmsg: 'Unknown modifier: $pushAll'
有人可以帮助我吗?
【问题讨论】:
【参考方案1】:尝试改用findOneAndUpdate
。
User.findOneAndUpdate(
name: "gino" ,
$push: posts: title: 'post', content: 'content' ,
new: true ,
function (err, user)
if(err) console.log("Something wrong when updating data");
console.log(user);
);
希望对你有帮助!
【讨论】:
它有效,谢谢。但是,我想知道 .push 在我的代码中不起作用。 您可以使用传统的 javascript 点符号来更新mongoose
中的文档。但是,由于您没有在代码中使用返回的文档,因此findOneAndUpdate
是这里更合适的方式。你可以在官方文档mongoose
阅读更多关于更新文档的内容:mongoosejs.com/docs/documents【参考方案2】:
如果您使用的是 3.5 版或更高版本的 MongoDB,则可能是 $pushAll 的问题,它已被弃用。 我创建了一个选项来解决将 usePushEach 设置为 true 的问题:
new Schema( arr: [String] , usePushEach: true );
成立于:
https://github.com/Automattic/mongoose/issues/5574#issuecomment-332290518
与 .push 一起使用会很有用。
【讨论】:
谢谢,我使用的是 mongo 3.6.1,这解决了我使用旧版本代码的问题。以上是关于mongodb 错误 mongoose 不会在数组 $pushAll 中推送对象的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose 5.0.15 / MongoDB 3.6.4 转换为数组失败的值 [NaN,NaN]
mongoose.connect 在连接到 mongodb 后不调用回调
Mongoose 5.0.15 / MongoDB 3.6.4转换为数组失败[NaN,NaN]