1

辞書を含む配列をどのように操作しますか? postテキストを検索できるように、すべてのフィールドをまとめようとしています。

mongo私の試みは、シェルを使用してどこにも行きません。

User.Blog().find({}).where('post').in(writing).exec(function (err, result) {
  //do something with results
}); // doesn't work

スキーマ(編集: @JAM コメントから修正)

var blogSchema = new mongoose.Schema({
  group:  String,
  writing: [{
        post: String,
        name : Number
        }]
});

var Blog = mongoose.model('Blog', blogSchema);

更新: json データと、mongo シェルを使用して mongodb にデータを配置するコマンドを追加します。

{
  group:  "Design Writing",
  writing: [{
        post: "A very very very short post.",
        name:  10
  }, {
        post: "An early morning post about everything.",
        name:  11
  }]
}

*または、次の名前のコレクション内の db に挿入する 1 行としてmy_collection: *

db.my_collection.insert( {group:  "Design Writing", writing: [{post: "A very very very short post.",name:  10}, {post: "An early morning post about everything.",name:  11}]} )
4

1 に答える 1

5

配列内のオブジェクトはsub/embedded-documentswritingとして扱われます。これは、データベースに格納されるときにが割り当てられることを意味します。_id

Blogしたがって、これらのサブドキュメントに基づいてをクエリする方法はいくつかあります。

var ObjectId = mongoose.Types.ObjectId;

// Assuming these objects are in the 'writing' array of a Blog
var postObject = { post: 'some text', name: 10 },
    postObjectWithId = { _id: new ObjectId(), post: 'some text', name: 10 };

// Example #1 Works!
Blog.find({'writing.post': postObject.post})
    .exec(function(err, res){ onBlogResult("Ex#1", err, res) });

// Example #2 Works!
Blog.find({})                        
    .where('writing').in([postObjectWithId])
    .exec(function(err, res){ onBlogResult("Ex#2", err, res) });

// Example #3 Works - its the same as example #2!
Blog.find({'writing': { $in: [ postObjectWithId ]}})
    .exec(function(err, res){ onBlogResult("Ex#3", err, res) });

// Example #4 Fails because of missing _id on postObject!
Blog.find({'writing': { $in: [ postObject ]}})
    .exec(function(err, res){ onBlogResult("Ex#4", err, res) });

ご覧のとおり、完全なオブジェクト ( を含む) がある場合はfind、要素を含む配列を持つオブジェクトのみを使用できます。in_id

このGISTでソース全体を表示できます- 自分でテストしてください :)

お役に立てれば :)

ここでマングースのドキュメントを読んでください

于 2013-05-13T18:32:08.810 に答える