2017-05-29 3 views
0

Node.jsからmongoDBに入力(エラーまたは適切な挿入)を挿入しています。これらの入力は変数に格納されます。ここで私はノード/モンゴー:変数を正しく挿入してクエリーが効率的になる方法は?

collection.insert({ 
         "fields": 
          { 
           "fname": [stackErrors] 

           }, 
         }), (etc) 

とfind()クエリの出力を持っているものです。

{ 
"_id" : ObjectId("592bfb979b047027983a7283"), 
"fields" : { 
    "fname" : [ 
     { 
      "message" : "expected '' to be NaN", 
      "showDiff" : false, 
      "actual" : "", 
      "expected" : null, 
      "name" : "AssertionError" 
     } 
    ] 

しかし、私は、例えばを見つけるために、効率的なクエリを実行することはできませんので、私は私が間違って挿入をやっていると思いますアサーションエラー、私の目標です。私はアサーションエラーやfnameフィールドの入力などを探していきたいと思っています。助けてもらえますか?おかげ

EDIT:

回答のおかげで、多分私は明らかにされていません。私は各フォームフィールドを照会する必要があります、私は各フィールドはオブジェクトでなければならないと思いますか?これは関数全体です:

function saveToMongo(stackErrors) { 

     //CONNECTION 

     MongoClient.connect(url, function (err, db) { 
      assert.equal(null, err); 
      console.log("Connected correctly to server"); 

      insertDocuments(db, function() { 
       db.close(); 
      }); 

     }); 

     //INSERT 

     var insertDocuments = function (db, callback) { 

      var collection = db.collection('http_methods'); 
      collection.insert({ 
       "fields": { 
        "fname": [stackErrors], 
        "surname": [stackErrors], 

       }, 

      }), 
       function (err, result) { 
        assert.equal(err, null); 
        callback(result); 
       }; 

     } 

    } 

}) 

このように、すべてのフィールドは1つのオブジェクトです。キー "name"とその値を削除したい場合は、すべてのフィールドから削除します。では、よりよい解決策は何ですか?このようなものが必要ですか?

var collection = db.collection('http_methods'); 
       collection.insert({ 
        "fields": { 
         "fname": [stackErrors] 
        }, 
        "fields": { 
         "surname": [stackErrors] 
         }, 
+0

以下のコードを参照してください。MongoDBを使用している場合は? – mabako

+0

@makaboこのクエリは何も返しません: 'db.http_methods.find({" fields.fname ":" name "});' – FuManchu

+0

@makaboよく、この1つの 'db.http_methods.find({" fields.fname.name ":" AssertionError "})。pretty();'はfnameのクエリのパラメータを返します。 – FuManchu

答えて

0

まず、以下のコマンドを使用してassertパッケージをインストールする必要があります。

npm install assert 

データを挿入するためのコードは次のようになります:

var assert=require("assert"); 
var mongo=require("mongodb").MongoClient; 
var url=//the url for accessing collection goes here. 
mongo.connect(url,function(err,db){ 
assert.equal(null,err) 
db.collection("<collection-name>").insert({"fields":{"fname":{$push:"stackErrors"}}}); 
}); 
+1

よく、ノードはキーとして '$ push'を読み込んでいますが、これは解決策だとは思わないし、そうです、私はassertをインストールしました – FuManchu

0

は、あなたがこれまでにしようとしているクエリ

var db = require('./../db.js'); 
var ObjectId = db.getObjectID(); 
module.exports = { 
    addUser: function (data, cb) { 
    var data = {"fields": {"fname": [stackErrors]}}; 
    var collection = db.getDb().collection('users'); 
    collection.insertOne(data, function (err, result) { 
     if (err) { 
      console.log(err); 
     } else { 
      cb(err, result); 
     } 
    }); 
    }); 
}, 
関連する問題