sql >> データベース >  >> NoSQL >> MongoDB

$ addToSetを配列に追加しますが、nullが返されます

    問題は、Product.find()の結果です。 クエリが、必要な単一のドキュメントではなく、コレクション内の任意のドキュメントと一致する場合のMongooseドキュメントの配列です。

    したがって、式{$addToSet: {products: product._id}} {$addToSet: {products: undefined}}に解決されます product は配列であり、product._id 未定義です。この簡単な例を見てください

    var product = [{ '_id': 1 }];
    console.log(product._id) // logs undefined
    

    この問題を解決するには、配列内の唯一の要素に次のようにアクセスします

    wishList.update(
        { '_id': request.body.wishlistId },
        { '$addToSet': { 'products': product[0]._id} }, 
        function(err, wishlist) { ... }
    );
    

    または、findOne()を使用します 製品をクエリするときに単一のドキュメントを返すメソッド:

    Product.findOne({ '_id': request.body.productId }, function(err, product) {
        if(err) {
            response.status(500).send({err: "could not add item to wishlist"});
        } else {
            wishList.update(
                { '_id': request.body.wishlistId },
                { '$addToSet': { 'products': product._id } }, 
                function(err, wishlist) { ... }
            );
        }
    });
    

    findById() この場合、メソッドも役立ちます。つまり

    Product.findById(request.body.productId, function(err, product) {
        if(err) {
            response.status(500).send({err: "could not add item to wishlist"});
        } else {
            wishList.update(
                { '_id': request.body.wishlistId },
                { '$addToSet': { 'products': product._id } }, 
                function(err, wishlist) { ... }
            );
        }
    });
    



    1. 基準を満たすネストされたオブジェクトを見つけるMongoDB

    2. 上限付きコレクションのパフォーマンスの問題

    3. 複数のフィールドで同時にMongodb集計(カウント)

    4. Redisバックグラウンドジョブが完了した後、flaskのrender_templateを返すにはどうすればよいですか?