Здесь вы идете, 3 способа сделать, Самый короткий для скуки:
db.student.find({}, 'roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}).select('roll _id'); // <--- Just multiple fields name space separated
// OR
db.student.find({}, {'roll' : 1 , '_id' : 1 ); // <---- Old lengthy boring way
Чтобы удалить определенное поле, используйте -
:
db.student.find({}).select('roll -_id') // <--- Will remove id from result
В зависимости от того, что вы действительно ищете, это может быть уже сделано для вас. Если вы пытаетесь использовать индексатор в коллекции Bars, это уже сделано для вас ::
Foo myFoo = new Foo();
Bar myBar = myFood.Bars[1];
Или если вы пытаетесь получить следующие функции:
Foo myFoo = new Foo();
Bar myBar = myFoo[1];
Затем:
public Bar this[int index]
{
get { return Bars[index]; }
}
Вы можете использовать явно реализованные интерфейсы, как показано здесь: Именованное индексированное свойство в C #? (см. второй способ, показанный в этом ответе)
public class NamedIndexProp
{
private MainClass _Owner;
public NamedIndexProp(MainClass Owner) { _Owner = Owner;
public DataType this[IndexType ndx]
{
get { return _Owner.Getter(ndx); }
set { _Owner.Setter(ndx, value); }
}
}
public MainClass
{
private NamedIndexProp _PropName;
public MainClass()
{
_PropName = new NamedIndexProp(this);
}
public NamedIndexProp PropName { get { return _PropName; } }
internal DataType getter(IndexType ndx)
{
return ...
}
internal void Setter(IndexType ndx, DataType value)
{
... = value;
}
}
Нет - вы не можете писать именованные индекеры в C #. Начиная с C # 4, вы можете использовать их для COM-объектов, но вы не можете их записать.
Как вы уже заметили, foo.Bars[index]
будет делать то, что вы хотите, в любом случае ... этот ответ был в основном для будущих читателей.
Чтобы разработать: подвергая свойство Bars
некоторого типа, у которого есть индекс, достигается то, что вы хотите, но вы должны рассмотреть, как его разоблачить: