【问题标题】:Node JS Mongoose PULL queryNode JS Mongoose PULL 查询
【发布时间】:2015-11-08 19:21:07
【问题描述】:

我在这里找到了很多很棒的答案,比如this 回答this。但我无法让它工作...... 我在id所在的查询中尝试了ObjectId("55cf816559d2fc8d0e6c14a8")

这个查询在 robotsmongo 运行时有效:

db.getCollection('events').update(
    { "_id": ObjectId("55cf816559d2fc8d0e6c14a8") }, 
    { "$pull": { "workers" : { "_id": ObjectId("55cf89ac7cba1d0a10ca86c7")}}},
    false,
    true
)

旁注,什么是 false,true ?

这是我当前的代码

event.update(
    {'_id': "55cf816559d2fc8d0e6c14a8"}, 
    { "$pull": { "workers" : {_id: "55cf89ac7cba1d0a10ca86c7"}}},
    function(err, result) {
        console.log(err);
        console.log(result);
    }
);

我没有收到任何错误,结果等于 1。

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query


    【解决方案1】:

    为我工作。你一定是在做一些不同的错误的事情:

    var async = require('async'),
        mongoose = require('mongoose'),
        Schema = mongoose.Schema;
    
    mongoose.connect('mongodb://localhost/test');
    
    
    var workerSchema = new Schema({
      name: String
    });
    
    var eventSchema = new Schema({
      name: String,
      workers: [workerSchema]
    });
    
    
    var Event = mongoose.model( 'Event', eventSchema );
    
    async.series(
      [
        function(callback) {
          Event.remove({},function(err) {
            callback(err);
          });
        },
        function(callback) {
          var event = new Event({
            _id: "55cf816559d2fc8d0e6c14a8",
            name: "Great thing"
          });
          event.workers.push({
            _id: "55cf89ac7cba1d0a10ca86c7",
            name: "Worker1"
          });
          event.save(function(err,event) {
            console.log(event);
            callback(err);
          });
        },
        function(callback) {
          Event.findOneAndUpdate(
            { "_id": "55cf816559d2fc8d0e6c14a8" },
            { "$pull": { "workers": { "_id": "55cf89ac7cba1d0a10ca86c7" } } },
            { "new": true },
            function(err,event) {
              console.log(event)
              callback(err);
            }
          );
        }
      ],
      function(err) {
        if (err) throw err;
        mongoose.disconnect();
      }
    );
    

    预期输出:

    { __v: 0,
      _id: 55cf816559d2fc8d0e6c14a8,
      name: 'Great thing',
      workers: [ { _id: 55cf89ac7cba1d0a10ca86c7, name: 'Worker1' } ] }
    { _id: 55cf816559d2fc8d0e6c14a8,
      name: 'Great thing',
      __v: 0,
      workers: [] }
    

    【讨论】:

    • 谢谢,我的代码出了什么问题?另一个问题 "{ "new": true }," 那是干什么用的?
    • @KristerJohansson .findOneAndUpdate() 和类似的方法都会修改匹配的文档并返回文档。 { "new": true } 修改了默认行为,即返回修改前的“原始”文档,而不是返回“修改后的”文档。它不是必需的,但这只是在这里显示结果的一种方式。不确定您的代码到底出了什么问题,但这为您提供了一些可以比较的东西。 Mongoose 会自动将隐含的“_id”字段转换为 ObjectId。
    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2014-08-04
    • 1970-01-01
    • 2020-09-23
    • 2016-08-17
    • 2019-05-17
    • 2019-09-05
    • 2014-03-19
    相关资源
    最近更新 更多