0

そのため、ノードを使用して mongodb コレクションにデータを入力しようとしています。私が知る限り、コレクションにアクセスできます。

var collection = db.collection("whatsGoingOnEvents");
if(collection){
console.log("hitting stream");
var stream = collection.find({time: parsedObject.time, endTime: parsedObject.endTime, lon:parsedObject.lon,lat:parsedObject.lat}).stream();
console.log(stream);
stream.on("data",function(data){
    console.log("data");
    console.log(data);
    if(!data){
        collection.insert(parsedObject);
        console.log("hitting insert");
    }
});
stream.on("end",function(){
//dosomething
});
}

parsedObject には、これらのフィールドがすべて含まれている場合と含まれていない場合があります。これは重要ですか? フィールドが存在しない場合、 collection.find() は「未定義」の時間を探しているだけで、技術的にはまだ値であると思いました。

打つconsole.log("data")ことはないので書類を入れることはありません。私はこのリンクをたどろうとしています。

そのため、挿入が行われない理由がわかりません。何も追加されていないことはわかってfrom db.collection.stats();います。これは、コレクションのサイズが 0 であることを示しています。

ああ、これは私が Mongo に接続するために使用しているものです-

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

編集 -

以下の回答を試してみました-その結果、このエラーが発生しました-

    lib/mongodb/connection/server.js:481
        throw err;
              ^
Error: Cannot use a writeConcern without a provided callback
    at insertAll (/Users/psanker/Google Drive/Coding/Javascript/WhatsGoingOn/node_modules/mongodb/lib/mongodb/collection.js:332:11)
    at Collection.insert (/Users/psanker/Google Drive/Coding/Javascript/WhatsGoingOn/node_modules/mongodb/lib/mongodb/collection.js:91:3)

^挿入にコールバックを追加していないため、上記が発生しました。

4

1 に答える 1

1

クエリがどのレコードにも一致しない場合 (コレクションのサイズが 0 であると記述した場合、これは論理的に思われます)、dataイベント ハンドラーが呼び出されることはありません (実際の結果がある場合にのみ呼び出されるため)。

findOne通常のコールバック を使用する方が良いと思います:

collection.findOne({ params }, function(err, result) {
  if (err)
    throw err;
  if (result === null) {
    collection.insert(parsedObject, { w: 0 });
  }
});

またはさえupsert

于 2013-03-28T10:55:08.830 に答える