【问题标题】:mongoose update: $set and $push not update anything?猫鼬更新:$set 和 $push 不更新任何东西?
【发布时间】:2016-06-23 17:19:36
【问题描述】:

如何使用 $set 和 $push 更新 mongo?

我有以下数据:

[ { _id: 57682f69feaf405c51fdf144,
    email: 'testuser1@testdomain.com',
    username: 'testuser' },
  { username: 'sevilayha', _id: 5768d36c4c243de7422f681e, __v: 0 } ]

在我的快递 app.js 中:

// With Mongoose, everything is derived from a Schema. Let's get a reference to it and define our users.
var userSchema = mongoose.Schema({
    name: String,
    username: { type: String, required: true, unique: true },
    password: { type: String, required: true },
    admin: Boolean,
    location: String,
    meta: {
      age: Number,
      website: String
    },
    created_at: Date,
    updated_at: Date
});

// The next step is compiling our schema into a Model.
var User = mongoose.model('User', userSchema);

app.get("/", function(req, res) {

   var updateQuery = {};

   User.findOne({ username: /^sevilayha/ }, function (err, user) {
    if (err) return console.error(err);
    updateQuery["meta"] = {
      date: Date.now()
    }
    user.update({
      $push: updateQuery,
      $set: { size: 'large' },
      email: 'test@example.com'
    });
    res.status(200).json(user);
  });
  User.find(function (err, users) {
    if (err) return console.error(err);
    console.log(users);
  });

我仍然得到相同的数据。没有更新、设置或推送。有什么我错过的想法吗?

我在“猫鼬”上:“~4.5.1”

【问题讨论】:

  • 我相信您应该在更新数据后添加 user.save() 以便新值反映在数据库中。
  • 不。没必要。也用 save() 测试过,但没有运气。
  • 您是否尝试过不使用.update,而是使用.save,而不是像这样:Model.findOne({ name: 'borne' }, function (err, doc){ doc.name = 'jason borne'; doc.visits.$inc(); doc.save(); });,取自猫鼬文档?
  • 是的,我的错!我在看 2.* 文档。我仍然觉得你没有将回调函数传递给更新调用很奇怪,因为在处理查询时可能会出现一些错误。您可以尝试添加回调并在触发后返回结果,因为一旦对 db 完成操作,模型可能会更新
  • $pushmeant for arrays,但 meta 不是数组。此外,sizeemail 都不属于您的架构。

标签: node.js mongodb express mongoose


【解决方案1】:

我更新了我的架构,但我必须添加回调,否则它将不起作用:

var userSchema = mongoose.Schema({
    name: String,
    username: { type: String, required: true, unique: true },
    password: { type: String, required: false },
    email: String,
    admin: Boolean,
    location: String,
    meta: {
      age: Number,
      website: String
    },
    data: Array,
    created_at: Date,
    updated_at: Date
});

var updateQuery = {};
  User.findOne({ username: /^sevilayha/ }, function (err, user) {
    if (err) return console.error(err);
    updateQuery["data"] = {
      date: Date.now()
    }
    user.update({
      $push: updateQuery,
      $set: { location: 'large' },
      name: 'John',
      email: 'test2@example.com'
    }, function(err, res) {
      if (err) return console.error(err);
      res.status(200).json(res);
    });
  });

多么奇怪!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-14
    • 1970-01-01
    • 2012-03-28
    • 2015-07-13
    • 2016-05-24
    • 1970-01-01
    • 2020-11-13
    • 2021-02-24
    相关资源
    最近更新 更多