nodejs中的findAndModify查询中的投影mongodb driver

时间:2016-01-05 08:53:51

标签: node.js mongodb mongodb-query

我无法只从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();
    });

2 个答案:

答案 0 :(得分:3)

参考文献。 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();
    });

答案 1 :(得分:1)

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

  

选项对象可用于以下选项:

     

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