nodejs mongodb $ in [array]配列が変数の場合、機能しません

just_user

これは私には非常に奇妙です。配列onlyIdsをデータベースの集計クエリに入れると、結果が得られません。ただし、5行目から出力されるonlyIdsのコンテンツを次のように配置すると、次のようになります。

["52e953942a13df5be22cf792","52e953942a13df5be22cf793","52e953942a13df5be22cf797"...]

その後、それは動作します。しかし、変数を使用する場合はそうではありません。

この関数:

var onlyIds = [];
for (var i = 0; i < users.length; i++) {
    onlyIds.push(users[i]._id);
}
console.log("ids: " + JSON.stringify(onlyIds));      <---------- not empty

db.collection('posts', function(err, collection) {
    collection.aggregate([
        {$match: {user_id: {$in: onlyIds}}},   <------- not working
        {$match: {created:{$gte: 0}}},
        {$sort:{"created": -1}},
        {$skip: req.body.skip},
        {$limit: req.body.limit}
    ], 

    function(err, posts) {
        var errorNo, content, message;
        if (err) {
            errorNo = resSend.errorDB;
            message = JSON.stringify(err);
        } else {
            errorNo = resSend.errorNo;
            content = posts;
            message = "";
-->         console.log(JSON.stringify(posts));
        }
        resSend.sendResponse(res,  resSend.errorNo, content, message);
    });
});

つまり、なぜこれが機能するのでしょうか。

{$match: {user_id: {$in: ["52e953942a13df5be22cf792","52e953942a13df5be22cf793","52e953942a13df5be22cf797"...]}}}

そしてこれはしません:

{$match: {user_id: {$in: onlyIds}}}

そして、機能しない行は、別の機能で完全に機能します。何かアイデアや悟りはありますか?

編集:次のような答えを見つけて使用するように切り替えます:

collection.find({'user_id': {$in: onlyIdsX}}).toArray(function(err, posts)

どちらも動作しません。

回答:

選択した回答が以下に示すように、検索する変数がObjectIdまたは文字列の場合です。他の人にとっては、db内の変数が一致させようとしているものと同じタイプであることを確認してください。私の場合、両方とも文字列であるはずでしたが、「onlyIds」の1つはObjectIdsでした。

Amol M Kulkarni

次のコードを試して、ループを変更してください。

var ids = ["52e953942a13df5be22cf792","52e953942a13df5be22cf793","52e953942a13df5be22cf797"];
var obj_ids = [];
for (var i = 0; i < users.length; i++) {
    obj_ids.push(new ObjectID(users[i]._id.toString()));    
    var obj_ids.push(users[i]._id);    // <== This will not work if your DB has _id : ObjectID("xyz") [i.e. you are not overiding defaults]
}

そしてvar ObjectID = require('mongodb').ObjectID;、コードに含める必要があります。
使用する必要があります.toArray(function(err,..(集約フレームワークを使用したため、あなたの場合ではありません)。これは、使用していない場合にも問題を引き起こしますfindOne()(これに関する詳細については、ここにリンクがあります


以下は、問題(コメント内)と作業コードを特定する例です。

var mongo = require('mongodb'),
    Server = mongo.Server,
    Db = mongo.Db,
    ObjectID = require('mongodb').ObjectID;
var BSON = require('mongodb').BSONPure;
var server = new Server('localhost', 27017, {
    auto_reconnect: true
}); 
var MongoClient = require('mongodb').MongoClient

//let id = your _id, smth like '6dg27sh2sdhsdhs72hsdfs2sfs'...
var users = ["52e953942a13df5be22cf792","52cbd028e9f43a090ca0c1af","52e953942a13df5be22cf797"];
var obj_ids = [];
for (var i = 0; i < users.length; i++) {
    obj_ids.push(new ObjectID(users[i].toString()));    
    //obj_ids.push(users[i]._id);    // <== This will not work if your DB has _id : ObjectID("xyz") [i.e. you are not overiding defaults]
}

MongoClient.connect('mongodb://127.0.0.1:27017/YourDBName', function(err, db) {
    console.log('err'  +  err);
    db.collection('posts', function(error, collection) {
            //collection.find({_id:{$in: users}}),function(err, docs) { //This will not work
            collection.find({_id:{$in: obj_ids}}).toArray(function(err, docs) {
              console.log("Printing docs from Array. count " + docs.length);
              docs.forEach(function(doc) {
                console.log("Doc from Array ");
                console.dir(doc);
              });
            });
    });
});

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mongodbのobjectidがnodejsプログラムで機能していません

分類Dev

get mongodb data to nodejs array?

分類Dev

mongoDBとsailsの集合体はnodejsでは機能しません

分類Dev

MongoDB $ regex演算子はmongocを使用してNodeJSを機能させません

分類Dev

MongoDB $ regex演算子はmongocを使用してNodeJSを機能させません

分類Dev

NodeJS と mongoDB JSONFormat の問題

分類Dev

mongodbアグリゲートは文字列化され、nodejsでは機能しません

分類Dev

NodeJS配列プッシュが機能していません

分類Dev

mongoDB(nodeJS内)集約pipleineは空の配列を返します

分類Dev

nodejsのsettimeoutIDをmongodbに保存します

分類Dev

nodejsはmongodbの文字列を変更します

分類Dev

Docker nodejs mongodb

分類Dev

Mongodb not working with Nodejs

分類Dev

NodeJs + Mongodbが結果を待つことができません

分類Dev

MongoDB NodeJS> db.createRoleは関数ではありません

分類Dev

Nodejsを使用したMongoDbへのデータ挿入が機能しない

分類Dev

NodeJS, MongoDB, Aggregation function with $lookup result is empty array []

分類Dev

Search for keywords in array and only get the matching elements in MongoDB using NodeJS

分類Dev

How to Update Multiple Fields Inside an Array in Mongodb, Express, NodeJs?

分類Dev

NodeJSがMongoDBに値を保存する方法

分類Dev

NodeJSを使用したMongoDB平均集計

分類Dev

async / awaitを使用したmongodb接続-NodeJS

分類Dev

Expressを使用したMongodbとnodejs

分類Dev

NodeJSクラス構造のMongoDB

分類Dev

nodejsとmongodbのretryWrites = falseを修正

分類Dev

私の場合、MONGODBで$ inと$ andを使用しても機能しません

分類Dev

$ unset配列が存在しない場合、MongoDBはスローしません

分類Dev

mongooseとnodejsを使用して、モデルの配列をmongodbに保存します

分類Dev

mongooseはMongoDB(NodeJS / AWS Lambda)から空の配列を取得します

Related 関連記事

  1. 1

    mongodbのobjectidがnodejsプログラムで機能していません

  2. 2

    get mongodb data to nodejs array?

  3. 3

    mongoDBとsailsの集合体はnodejsでは機能しません

  4. 4

    MongoDB $ regex演算子はmongocを使用してNodeJSを機能させません

  5. 5

    MongoDB $ regex演算子はmongocを使用してNodeJSを機能させません

  6. 6

    NodeJS と mongoDB JSONFormat の問題

  7. 7

    mongodbアグリゲートは文字列化され、nodejsでは機能しません

  8. 8

    NodeJS配列プッシュが機能していません

  9. 9

    mongoDB(nodeJS内)集約pipleineは空の配列を返します

  10. 10

    nodejsのsettimeoutIDをmongodbに保存します

  11. 11

    nodejsはmongodbの文字列を変更します

  12. 12

    Docker nodejs mongodb

  13. 13

    Mongodb not working with Nodejs

  14. 14

    NodeJs + Mongodbが結果を待つことができません

  15. 15

    MongoDB NodeJS> db.createRoleは関数ではありません

  16. 16

    Nodejsを使用したMongoDbへのデータ挿入が機能しない

  17. 17

    NodeJS, MongoDB, Aggregation function with $lookup result is empty array []

  18. 18

    Search for keywords in array and only get the matching elements in MongoDB using NodeJS

  19. 19

    How to Update Multiple Fields Inside an Array in Mongodb, Express, NodeJs?

  20. 20

    NodeJSがMongoDBに値を保存する方法

  21. 21

    NodeJSを使用したMongoDB平均集計

  22. 22

    async / awaitを使用したmongodb接続-NodeJS

  23. 23

    Expressを使用したMongodbとnodejs

  24. 24

    NodeJSクラス構造のMongoDB

  25. 25

    nodejsとmongodbのretryWrites = falseを修正

  26. 26

    私の場合、MONGODBで$ inと$ andを使用しても機能しません

  27. 27

    $ unset配列が存在しない場合、MongoDBはスローしません

  28. 28

    mongooseとnodejsを使用して、モデルの配列をmongodbに保存します

  29. 29

    mongooseはMongoDB(NodeJS / AWS Lambda)から空の配列を取得します

ホットタグ

アーカイブ