【问题标题】:Projection in findAndModify query in nodejs mongodb drivernodejs mongodb驱动程序中findAndModify查询中的投影
【发布时间】:2016-01-05 08:53:50
【问题描述】:

我无法从 findAndModify 查询中仅投影必填字段,它正在返回整个文档。

var MongoClient = require('mongodb').MongoClient;


db.collection("conf").findAndModify(
    searchDoc,
    sortDoc,
    {$set: updateDoc},
    {new: true},
    {"required_field": 1},
    function (error, obj) {
        console.log(obj["value"]);
        db.close();
    });

【问题讨论】:

    标签: node.js mongodb mongodb-query


    【解决方案1】:

    参考文献。 https://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html#find-and-modify

    参考文献。 https://github.com/mongodb/node-mongodb-native/blob/V2.1.3/lib/collection.js#L2319

    collection.findAndModify(criteria[, sort[, update[, options]]], callback)
    

    optons 是键值对。它需要字段名称。尝试关注。

    var MongoClient = require('mongodb').MongoClient;
    
    db.collection("conf").findAndModify(
        searchDoc,          // criteria
        sortDoc,            // sort
        {$set: updateDoc},  // update
        {                   // options
            new: true,
            fields: {"required_field": 1}
        },
        function (error, obj) {
            console.log(obj["value"]);
            db.close();
        });
    

    【讨论】:

      【解决方案2】:

      似乎您正在使用 mongodb nodejs 驱动程序的函数findAndModifyoptions 对象不是用于投影,而是用于函数的行为

      Options 对象可用于以下选项:

      remove - 如果设置为 true(默认为 false),则从集合中删除记录。回调函数仍然获取对象,但它不再存在于集合中。

      new - 如果设置为 true,回调函数返回修改后的记录。默认为false(返回原始记录)

      upsert - 如果设置为 true 并且没有与查询匹配的记录,则替换对象作为新记录插入

      即使通过函数findAndModify与mongo shell的函数同名,它的行为也可能不同。你应该在这里查看文档(https://mongodb.github.io/node-mongodb-native/markdown-docs/insert.html#find-and-modify

      【讨论】:

      • 是的,我知道“{new: true}”是选项对象。但我只是尝试在选项对象'{“required_field”:1}'之后添加我的投影对象。但在文档中没有提到。无论我需要以什么方式投影 required_field。
      • @somallg 你是对的!但是代码中有未记录的选项fieldsgithub.com/mongodb/node-mongodb-native/blob/V2.1.3/lib/…)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2017-03-06
      相关资源
      最近更新 更多