1

私のアプリケーションには、ストーリーを持つ「投稿」があります

ここで、ストーリー配列の複数のストーリーから 1 つの投稿とそのストーリーを 1 つだけ選択したいと考えています。

var db = req.db;
var mongo = require('mongodb');
var collection = db.get('clnPost');
var userId = req.body.userId;
var postId = req.body.postId;
var storyId = req.body.storyId;
var ObjectID = mongo.ObjectID;
 var mongo = require('mongodb');
var ObjectID = mongo.ObjectID;
collection.find({ _id: ObjectId(postId), "Stories._id": ObjectID(req.body.storyId)}, function (e, docs) {
//some processing on the docs
}

リクエストを通じて送信されたストーリーIDを持つストーリーのみと一緒に投稿を返したいのですが、ストーリー配列内のすべてのストーリーを返します

ここに画像の説明を入力

ここで、その投稿のすべてのストーリーを取得しています。必要なのは、ID が一致するストーリーのみです。req.body.storyId

この質問を確認した後、$elemMatchも使用してみましたが、それでも同じ結果が得られました

collection.find({ _id: postId}, {Stories: { $elemMatch: { _id: req.body.storyId } } }, function (e, docs) {

私も試しました

collection.find({ "Stories._id":ObjectID(storyId)}, {"Stories.$":1,Stories: {$elemMatch: { "Stories._id" :ObjectID(storyId) }} } , function (e, docs) {

投稿文書の構造は次のとおりです。

{
    "_id": {
        "$oid": "55a7847ee4b07e03cc6acd21"
    },

    "Stories": [
        {
            "userId": "743439369097985",
            "story": "some story goes on here",
            "_id": {
                "$oid": "55c0b9367d1619a81daaefa0"
            },
            "Views": 29,
            "Likes": []
        },
        {
            "userId": "743439369097985",
            "story": "some story goes on here",
            "_id": {
                "$oid": "55c0bbd97abf0b941aafa169"
            },
            "Views": 23,
            "Likes": []
        }
    ]
}

私も$unwindを使ってみました

 var test= collection.aggregate( //where collection =db.get('clnPost')
            { $match: { "Stories._id": ObjectID(storyId) } },
            { $project : { Stories : 1 } },
            { $unwind : "$Stories" }
            );

更新 1: 私はモンクを使用しているため、集計が機能していません

4

1 に答える 1

2

サンプルドキュメントをコピーできないため、同様のものを使用しました:

{
    "_id" : "55a7847ee4b07e03cc6acd21",
    "Stories" : [{
        "userId" : "743439369097985",
        "story" : "some story goes on here",
        "_id" : "55c0b9367d1619a81daaefa0",
        "Views" : 29,
        "Likes" : [ ]
    }, {
        "userId" : "743439369097985",
        "story" : "some story goes on here",
        "_id" : "55c0bbd97abf0b941aafa169",
        "Views" : 23,
        "Likes" : [ ]
    }]
}

必要なものを取得するには、ここで使用した方法でドル射影演算子を使用する必要があります。

db.collection.find({
   "Stories._id": "55c0bbd97abf0b941aafa169"
}, {
   "Stories.$": 1
}).pretty()
于 2015-08-10T05:24:40.120 に答える