0
  var myschema  = new Schema({
      name: {type:String, default:'fullname'},
      subdoc: {
          day1: {type:Array, default:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
          day2: {type:Array, default:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
      }
  });
  var mymodel = Mongoose.model('mytest',myschema);
  //mongoose 3.5.6: find
  mymodel.find({},{'name'}, function(err,docs){
      logger.info("---> " + docs);
  });

結果:

---> { _id: 512da190ba48050f2e000001, **subdoc: {}**, name: 'fullname' }

fieldのみnameが返されるように要求されますが、この関数は常に を返しますsubdoc: {}。誰かがこれを説明できますか?

mongodbシェルを使用してください。問題ないようです

db.mytests.find({},{"name":1})
{ "_id" : ObjectId("512da190ba48050f2e000001"), "name" : "fullname" }

次に、モデルを次のように変更します。

var myschema  = new Schema({
          name: {type:String, default:'fullname'},
          subdoc: [
              day1: {type:Array, default:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
              day2: {type:Array, default:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}
          ] // **note: not {} here**
      })

同じmongoose api findを使用すると、結果はまさに私が期待したものです:

--->{ _id: 512da46fffebd24b30000002, name: 'fullname' }

私の質問は: なぜフィールド 'subdoc' が以前のスキーマで返されるのですか?

4

1 に答える 1

0

docsによると、少しずれているように見えます。

例:

// LIKE john という名前を付け、"name" フィールドと "friends" フィールドのみを選択し、すぐに実行 MyModel.find({ name: /john/i }, 'name friends', function (err, docs) { })

それで、私は次のようなことをします:

myModel.find( {}, '名前', コールバック);

編集

コメントに対処するには: mongodb コンソールでは、それをフォーマットする適切な方法は {'name':1, 'friend':1} です。使用:

db.collection.find({}, {'友達の名前'})

エラーがスローされます。これを適切に行うには、次のようにします。

db.collection.find({}, {'名前':1, '友人':1})

ただし、この方法でフィールドを選択したい場合は、マングースでも同様に行うことができます。

myModel.find({}, {'名前':1, '友人': 1}, コールバック);

参照: API ドキュメント

于 2013-02-26T02:42:48.393 に答える