在 React + Meteor 项目中,如何限制存储在 material-ui 自动完成组件中的数据库字段?
How do I restrict the db fields stored in a material-ui Autocomplete component in a React + Meteor Project?
我正在使用 React 和 material-ui.ui开发一个 Meteor 应用程序。
我通过以下代码将返回的字段限制为名称(和 _id):
const { heroNames } = useTracker(() => {
const sub = Meteor.subscribe('heroes');
return {
heroNames: HeroesCollection.find({}, { name: 1 }, { sort: { name: 1 } }).fetch(),
loading: !sub.ready(),
};
});
然后我使用 heroNames 中返回的数据呈现我的 MUI 自动完成组件:
<Autocomplete multiple
id="hero-selection"
options={heroNames}
disableCloseOnSelect
getOptionLabel={(hero) => hero.name}
isOptionEqualToValue={(option, value) => option._id === value._id}
onChange={(e, value) => setWarbandHeroes(value)}
renderOption={(props, hero, { selected }) => (
<li {...props}>
<Checkbox
icon={icon}
checkedIcon={checkedIcon}
style={{ marginRight: 8 }}
checked={selected}
/>
{hero.name}
</li>
)}
style={{ width: 500 }}
renderInput={(params) => (
<TextField {...params} label="Hero Selection" placeholder="Select Hero" />
)}
/>
但是,当我通过数据库中的自动完成功能保存用户选择的内容时,整个英雄记录都会被存储,而不仅仅是 name 和 _id 字段。我已经为此困惑了一段时间,希望得到任何帮助。
Ps - 这是我在 Stack Overflow 上发布的第一个问题。 :)
Meteor 的 API 与 Mongo 略有不同,如果你想限制字段,你需要使用 field
property
heroNames: HeroesCollection.find({}, { fields: { name: 1 } }, { sort: { name: 1 } }).fetch(),
我正在使用 React 和 material-ui.ui开发一个 Meteor 应用程序。
我通过以下代码将返回的字段限制为名称(和 _id):
const { heroNames } = useTracker(() => {
const sub = Meteor.subscribe('heroes');
return {
heroNames: HeroesCollection.find({}, { name: 1 }, { sort: { name: 1 } }).fetch(),
loading: !sub.ready(),
};
});
然后我使用 heroNames 中返回的数据呈现我的 MUI 自动完成组件:
<Autocomplete multiple
id="hero-selection"
options={heroNames}
disableCloseOnSelect
getOptionLabel={(hero) => hero.name}
isOptionEqualToValue={(option, value) => option._id === value._id}
onChange={(e, value) => setWarbandHeroes(value)}
renderOption={(props, hero, { selected }) => (
<li {...props}>
<Checkbox
icon={icon}
checkedIcon={checkedIcon}
style={{ marginRight: 8 }}
checked={selected}
/>
{hero.name}
</li>
)}
style={{ width: 500 }}
renderInput={(params) => (
<TextField {...params} label="Hero Selection" placeholder="Select Hero" />
)}
/>
但是,当我通过数据库中的自动完成功能保存用户选择的内容时,整个英雄记录都会被存储,而不仅仅是 name 和 _id 字段。我已经为此困惑了一段时间,希望得到任何帮助。
Ps - 这是我在 Stack Overflow 上发布的第一个问题。 :)
Meteor 的 API 与 Mongo 略有不同,如果你想限制字段,你需要使用 field
property
heroNames: HeroesCollection.find({}, { fields: { name: 1 } }, { sort: { name: 1 } }).fetch(),