首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb Error mongoose不推送数组$pushAll中的对象

mongodb Error mongoose不推送数组$pushAll中的对象
EN

Stack Overflow用户
提问于 2018-01-09 07:30:18
回答 2查看 1.3K关注 0票数 3

我有一个简单的用户和帖子模型的应用程序,

代码语言:javascript
复制
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"),并将一个帖子推送到:

代码语言:javascript
复制
// 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);
//     }
// });

还要创建另一个帖子来检查post模型是否正常工作:

代码语言:javascript
复制
// var newPost = new Post({
//     title: "honky",
//     content: "tonky"
// });
//
// newPost.save(function (err, post) {
//     if (err) {
//         console.log(err);
//     } else {
//         console.log(post);
//     }
// });

当我试图找到"gino“并将一个新项目推入帖子数组时,尝试使用以下代码片段保存用户(user.save)时出现错误:

代码语言:javascript
复制
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);
            }
        });
    }
});

当我运行这个应用程序时,我得到了这样的结果:

代码语言:javascript
复制
{ 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' }

有人能帮我吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-09 23:52:03

请尝试使用findOneAndUpdate

代码语言:javascript
复制
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);  
});

希望它能帮上忙!

票数 5
EN

Stack Overflow用户

发布于 2018-03-05 05:37:05

如果您使用的是3.5 MongoDB版本或更高版本,则$pushAll可能存在问题,该版本已被弃用。我创建了一个选项来解决将usePushEach设置为true的问题:

代码语言:javascript
复制
new Schema({ arr: [String] }, { usePushEach: true });

成立于:

https://github.com/Automattic/mongoose/issues/5574#issuecomment-332290518

对于与.push一起使用可能非常有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48159522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档